机器人+莫皮托



尝试使用 Robolectric 构建 android 单元测试。每次我需要模拟属于我的项目的方法时,创建一个 Shadow 类都会变得有点繁重。我认为在这种情况下使用Mockito会更容易,更轻。

但是当我尝试使用Mockito方法时,我收到一个错误java.lang.IllegalArgumentException:dexcache == null(找不到默认值;考虑设置"dexmaker.dexcache"系统属性)

为了解决这个问题,我认为需要通过调用来设置 dexcache 属性

System.setProperty("dexmaker.dexcache",getInstrumentation().getTargetContext().getCacheDir().getPath());

但我不知道在Robolectric中可以调用getInstrumentation。请建议一种推荐的方法来模拟我在 Robolectric 中项目的方法。

您可以将 Mockito

与 Robolectric 一起使用;但是,您需要确保添加的是"正常"的 Mockito 依赖项,而不是 Mockito-Android 或 dexmaker 依赖项。

Mockito通过生成类来工作;在桌面JRE(如单元测试环境)上,这意味着生成Java CLASS文件,但在Android设备和模拟器上,这意味着生成DEX文件。但是,如果 DexMaker 存在于类路径上,Mockito 将机会性地使用 DexMaker,即使像 Robolectric 单元测试那样在模拟器之外运行也是如此。调整依赖项以确保不包含 dexmaker,这将避免 dexmaker 或 dexcache 出现任何问题。

区分你对Robolectric和Mockito的想法的一个好方法是

Mockito:模拟并验证您的Java类/非Android框架依赖项

Robolectric:在需要时提供TestRunner和工作Android框架元素,例如Intent,Context。

Build.gradle dependencies

dependencies {
    ...
    testCompile 'junit:junit:4.12'
    testCompile 'org.robolectric:robolectric:3.0'
    testCompile 'org.mockito:mockito-core:1.10.19'
}

机器人测试流道

@RunWith(RobolectricTestRunner.class)
public class ExampleUnitTest {
    @Test
    public void addition_isCorrect() throws Exception {
        assertEquals(4, 2 + 2);
    }
}

测试愉快!

相关内容

  • 没有找到相关文章

最新更新