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

Gre*_* Ho 5 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

}

}
Run Code Online (Sandbox Code Playgroud)

我试过了

@Before
    public void setUp() throws Exception {
        provider = new Provider(mock(Context.class));
    }

    @Test
    public void DoSomethingTest() {
        final Data data = provider.getSomething();
        assertThat(data).isNotNull();
    }
Run Code Online (Sandbox Code Playgroud)

但是我得到了以下错误:java.lang.RuntimeException:Stub!在Android.content.Context上的android.content.Context.(Context.java:4).(ContextWrapper.java:5)

Kai*_*Kai 2

你调用getPackageName();-mock Context。要使其运行,您必须模拟该方法,例如:

Mockito.when(mock.getPackageName()).thenReturn("myPackage");
Run Code Online (Sandbox Code Playgroud)

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