Android单元测试:如何模拟Android的上下文

时间:2015-04-13 22:30:55

标签: android unit-testing mocking mockito

我是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)

1 个答案:

答案 0 :(得分:2)

您在getPackageName();上致电Context - 模拟。要实现此功能,您必须模拟以下方法:

Mockito.when(mock.getPackageName()).thenReturn("myPackage");

但这会让你的测试毫无用处。但是考虑到这一点,这不是我要编写的测试,因为(假设它按预期工作)它只是测试框架方法getPackageName()。在您的测试中,您应该测试您的代码或更具体的算法,而不是成功调用方法。