我有一个 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/