【问题标题】:Unit-tests and joda-time-android单元测试和 joda-time-android
【发布时间】:2016-05-12 15:15:57
【问题描述】:

我在Presenter 类中使用了joda-time-android 库的类,它不能有任何Android 依赖项。所以我无法正确测试它。我知道我可以为此使用Robolectric,但我想远离这个工具和我的Presenter 干净。我应该放弃 JodaTime 吗?还有其他解决方案吗?

【问题讨论】:

    标签: android jodatime mosby


    【解决方案1】:

    对于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 之前调用 JodaTimeAndroid.init()'... 什么是“JodaTime 库的默认 java 实现",在哪里买?
    【解决方案2】:

    好吧,joda-time-android 确实依赖于 Android 运行时才能工作。对此使用Robolectric 似乎是一个不错的用例,因为您不会与Android SDK 中的FragmentActivity 和其他UI 类进行交互。

    由于设置Robolectric 有点痛苦,还有另一种选择——您可以使用Adapter pattern 为常规Java Joda 时间库和Android 版本创建一个通用接口。

    如果可行且实用(取决于您要使用多少 Joda time API),您可以在运行应用程序时使用joda-time-android 支持您的Adapter,并在运行应用程序时使用joda-time 支持它单元测试。例如,我想您可以使用ApplicationonCreate() 方法中的Android 具体实现和单元测试@Before 中的Java 具体实现。

    【讨论】:

    • 我将适配器模式用于Log 类。但是在 JodaTime 的情况下,要编写的接口太多了。您的回答促使我找到了更优雅的解决方案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-03
    • 2021-03-18
    • 2012-02-16
    • 2012-10-16
    • 1970-01-01
    相关资源
    最近更新 更多