gpt4 book ai didi

android - 使用 Mockito 模拟构建版本

转载 作者:塔克拉玛干 更新时间:2023-11-02 22:07:52 27 4
gpt4 key购买 nike

我的目标是使用 Mockito 模拟 Build.Version.SDK_INT。已经尝试过:

final Build.VERSION buildVersion = Mockito.mock(Build.VERSION.class);
doReturn(buildVersion.getClass()).when(buildVersion).getClass();
doReturn(16).when(buildVersion.SDK_INT);

问题是:当 mock 之后需要方法时,.SDK_INT 不是方法。

最佳答案

到目前为止,与此问题类似的其他问题看起来您必须使用反射。

Stub value of Build.VERSION.SDK_INT in Local Unit Test

How to mock a static final variable using JUnit, EasyMock or PowerMock

static void setFinalStatic(Field field, Object newValue) throws Exception {
field.setAccessible(true);

Field modifiersField = Field.class.getDeclaredField("modifiers");
modifiersField.setAccessible(true);
modifiersField.setInt(field, field.getModifiers() & ~Modifier.FINAL);

field.set(null, newValue);
}

...然后在这种情况下像这样使用它...

setFinalStatic(Build.VERSION.class.getField("SDK_INT"), 16);

另一种方法是创建一个类,该类访问/包装该字段的方法可以在以后模拟

public interface BuildVersionAccessor {
int getSDK_INT();
}

然后模拟那个类/接口(interface)

BuildVersionAccessor buildVersion = mock(BuildVersionAccessor.class);
when(buildVersion.getSDK_INT()).thenReturn(16);

关于android - 使用 Mockito 模拟构建版本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40300469/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com