模拟 android.os.Build.MODEL

Gui*_*ume 2 android unit-testing mockito powermockito

我正在尝试使用 Mockito/PowerMockito 创建一个测试,其中我们使用android.os.Build.MODEL. 我尝试过使用:

@RunWith(PowerMockRunner.class)
@PrepareForTest({android.os.Build.class})
public class Test {
  @Before
  public void init() {
    PowerMockito.spy(android.os.Build.class);
    PowerMockito.doReturn("model").when(Build.class, "getString", "ro.product.model");
  }
}
Run Code Online (Sandbox Code Playgroud)

因为我看到正在Device.MODEL调用该private static String getString方法,但出现以下异常:

org.powermock.reflect.exceptions.MethodNotFoundException: No method found with name 'getString' with parameter types: [ java.lang.String ] in class android.os.Build.
Run Code Online (Sandbox Code Playgroud)

有什么办法可以模拟这个变量吗?

小智 6

ReflectionHelpers.setStaticField(Build.class,"MODEL", "Value-You-Want-Model-To-Be");
Run Code Online (Sandbox Code Playgroud)

我喜欢用 robolectric 来做这类事情,你可以使用上面的调用来模拟该领域