我有一个 Java 库,它使用了一些来自 Android API 的东西。我想使用 Mockito 为这个库编写单元测试。
有什么办法可以解决这个问题吗?
Mockito 在 Dalvik VM 上表现不佳,请参阅这篇文章:Using Mockito with Android virtual machine
更新:
自从这篇文章以来,我发现了 Robolectric,并且有机会在 Pivotal Labs 工作,并为这个库做出了一些小的贡献。我建议在 Android 测试框架/mockito 上使用它。此外,您可以自由使用 Robolectric 和 Mockito,但 Robolectric 中的阴影对象使 Mockito 在大多数用例中变得不必要。
尝试对 Android 进行单元测试的问题在于,您构建的 Android 库的每个方法都被存根,要么抛出存根异常,要么返回 null。如果您想测试您的应用程序并想要任何 Android 行为,那么您就不走运了,除非您使用 Robolectric,它会在类加载时动态重写字节码,并注入一个模拟行为的影子对象。
更新 2:
已经有一段时间了,情况发生了变化。Robolectric 中的许多 Shadow 类已替换为真正的 Android 类。现在使用真正的 Android jars,并且 Robolectric 只为更小的一组东西加载 Shadow 类。这也是使用 Robolectric 进行 Android 测试的更多理由。