Android:使用 Robolectric 和 Mockito 对 Android 应用程序进行单元测试

标签 android unit-testing mockito robolectric

我有一个 Java 库,它使用了 Android API 中的一些东西。我想使用 Mockito 为这个库编写单元测试。

我有办法解决这个问题吗?

Mockito 在 Dalvik VM 上运行不佳,请参阅此帖子:Using Mockito with Android virtual machine

更新:

自从发表这篇文章后,我发现了 Robolectric,并且有机会在 Pivotal Labs 工作并为这个库做出一些小贡献。我建议在 Android 测试框架/mockito 上使用它。此外,您可以自由使用 Robolectric 和 Mockito,但 Robolectric 中的影子对象使得 Mockito 对于大多数用例来说都是不必要的。

尝试对 Android 进行单元测试的问题在于,您构建的 Android 库中的每个方法都被 stub 以抛出 stub 异常或返回 null。如果你想测试你的应用程序并想要任何 Android 行为,你就不走运了,除非你使用 Robolectric,它会在类加载时即时重写字节码,并注入(inject)一个模拟行为的影子对象。

更新 2:

已经有一段时间了,情况发生了变化。 Robolectric 中的许多 Shadow 类已被替换为真正的 Android 类。现在使用的是真正的 Android jar,Robolectric 只为一小部分东西加载 Shadow 类。这更是使用 Robolectric 进行 Android 测试的一个原因。

最佳答案

经过多次谷歌搜索,我找到了这个 here 的答案.

基本上它涉及使用 Robolectric单元测试框架,拦截 Android 类的加载。然后您可以继续使用 Mockito(尽管在大多数情况下没有必要)并在 JVM 上运行您的测试!

关于Android:使用 Robolectric 和 Mockito 对 Android 应用程序进行单元测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8087972/

相关文章:

android - "is library"项目被红叉

Android - Volley - 同步和异步 http 请求

python - 使用 patch 初始化参数并使用 urllib2 进行模拟

java - 无法模拟 Quarkus、NullPointer 异常且找不到相关导入

unit-testing - chalice : Spock : Unit testing GORM domain class hooks

java - 使用 Mockito 从 void 方法中嗅出对象?

scala - 测试事件提交到服务

android - 如何在 ListView 的按下状态下使用带有渐变的可绘制对象?

android - 当 Google Play 应用内订阅自动续订时,它会发送另一个购买通知(应用内通知)吗?

java - 如何验证没有调用模拟对象的方法?莫基托