我是Android手机测试的新手,想知道如果我想对下面的getSomething()进行单元测试,我该如何模拟上下文。
提前多多感谢!
public class Provider {
private final String packageName;
public Provider(Context context) {
packageName = context.getPackageName();
}
public Data getSomething() {
return get(packageName);
}
private Data get(String packageName) {
// return something here based on the packageName
}
}
我试过
@Before
public void setUp() throws Exception {
provider = new Provider(mock(Context.class));
}
@Test
public void DoSomethingTest() {
final Data data = provider.getSomething();
assertThat(data).isNotNull();
}
但我收到以下错误: java.lang.RuntimeException:Stub! 在android.content.Context。(Context.java:4) 在android.content.ContextWrapper。(ContextWrapper.java:5)
答案 0 :(得分:2)
您在getPackageName();
上致电Context
- 模拟。要实现此功能,您必须模拟以下方法:
Mockito.when(mock.getPackageName()).thenReturn("myPackage");
但这会让你的测试毫无用处。但是考虑到这一点,这不是我要编写的测试,因为(假设它按预期工作)它只是测试框架方法getPackageName()
。在您的测试中,您应该测试您的代码或更具体的算法,而不是成功调用方法。