【问题标题】:Android Unit Test: How to mock Android's contextAndroid 单元测试:如何模拟 Android 的上下文
【发布时间】:2015-06-19 09:40:34
【问题描述】:

我是 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:存根! 在 android.content.Context.(Context.java:4) 在 android.content.ContextWrapper.(ContextWrapper.java:5)

【问题讨论】:

  • 这不是 UI 单元测试,而是功能测试

标签: android unit-testing mocking mockito


【解决方案1】:

您在Context-mock 上致电getPackageName();。要让它运行,您必须模拟以下方法:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-07-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-06
    • 1970-01-01
    • 2019-10-07
    相关资源
    最近更新 更多