我是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。(上下文.java:4) 在android.content.ContextWrapper。(上下文包装器.java:5)
你在Context
-mock上称getPackageName();
。要运行它,您必须模拟该方法,例如:
Mockito.when(mock.getPackageName()).thenReturn("myPackage");
但这会使您的测试几乎毫无用处。但是考虑到这一点,这不是我会写的测试,因为(假设它按您的预期工作)它只是测试框架方法getPackageName()
。在你的测试中,你应该测试你的代码,或者更具体地说,你的算法,而不是成功的方法调用。