【发布时间】:2016-05-12 15:15:57
【问题描述】:
我在Presenter 类中使用了joda-time-android 库的类,它不能有任何Android 依赖项。所以我无法正确测试它。我知道我可以为此使用Robolectric,但我想远离这个工具和我的Presenter 干净。我应该放弃 JodaTime 吗?还有其他解决方案吗?
【问题讨论】:
我在Presenter 类中使用了joda-time-android 库的类,它不能有任何Android 依赖项。所以我无法正确测试它。我知道我可以为此使用Robolectric,但我想远离这个工具和我的Presenter 干净。我应该放弃 JodaTime 吗?还有其他解决方案吗?
【问题讨论】:
对于Unit-tests,我们可以使用JodaTime 库的默认java 实现,因为它与joda-time-android 具有相同的包和类。
// for android
compile 'net.danlew:android.joda:2.9.3'
// joda-time for tests
testCompile 'joda-time:joda-time:2.9.3'
像魅力一样工作。
对于其他库的其他情况,请参阅@npace 的回答。
【讨论】:
好吧,joda-time-android 确实依赖于 Android 运行时才能工作。对此使用Robolectric 似乎是一个不错的用例,因为您不会与Android SDK 中的Fragment、Activity 和其他UI 类进行交互。
由于设置Robolectric 有点痛苦,还有另一种选择——您可以使用Adapter pattern 为常规Java Joda 时间库和Android 版本创建一个通用接口。
如果可行且实用(取决于您要使用多少 Joda time API),您可以在运行应用程序时使用joda-time-android 支持您的Adapter,并在运行应用程序时使用joda-time 支持它单元测试。例如,我想您可以使用Application 的onCreate() 方法中的Android 具体实现和单元测试@Before 中的Java 具体实现。
【讨论】:
Log 类。但是在 JodaTime 的情况下,要编写的接口太多了。您的回答促使我找到了更优雅的解决方案。