【问题标题】:AndroidThreeTen not working in unit test without robolectric?AndroidThreeTen 在没有 robolectric 的情况下无法在单元测试中工作?
【发布时间】:2019-08-15 20:35:10
【问题描述】:

我无法在不需要 robolectric 的情况下创建单元测试。我在我的代码中使用 AndroidThreeTen.init(this) 并且当我运行我的测试时,如果我禁用 robolectric 我会得到一个错误: org.threeten.bp.zone.ZoneRulesException: No time-zone data files registered

如果我启用它,我会得到: [Robolectric] com.mycomp.,yapp.utilities.log.LogTest.on Calling function w it returns an Int: sdk=28; resources=BINARY

我尝试过使用 testImplementation 'com.jakewharton.threetenabp:threetenabp:1.1.0' 没有任何区别。我在我的应用程序和 testApplication 中调用了 AndroidThreeTen.init(this)。有任何想法吗? 这是我的测试

@Test
    fun `on Calling function i it returns an Int`() {
        assertThat("Returned class is not an Int", Log.i("Test", "Test"), isA(Int::class.java))
        assertThat("Returned Int is not 0", Log.i("Test", "Test"), `is`(0))
    }

或者我是否因此必须使用 robolectric? (旁注:日志不是来自android的util.log,而是我自己的类)(已编辑)

【问题讨论】:

    标签: android unit-testing testing kotlin robolectric


    【解决方案1】:

    JVM 单元测试不在 Android 运行时上运行。除了 ThreeTenABP,您可以直接使用 ThreeTenBP 为常规 JVM 初始化相同的 API。

    在我的项目 build.gradle 中,我使用如下设置:

    implementation "com.jakewharton.threetenabp:threetenabp:${threetenabpVersion}"
    testImplementation("org.threeten:threetenbp:${threetenbpVersion}") {
        exclude module: "com.jakewharton.threetenabp:threetenabp:${threetenabpVersion}"
    }
    

    在哪里

    threetenabpVersion = '1.2.0'
    threetenbpVersion = '1.3.8'
    

    这通常通过 ThreeTenABP 使用 ThreeTenBP,但在单元测试配置中,它直接将 TreeTenBP 添加为依赖项及其初始化代码。不记得我为什么要加入exclude 规则;几年前就这样了。

    【讨论】:

    • 因为我对单元测试和所有这些都很陌生。我实现了这个,但不确定它是做什么的?
    • 添加了一些解释。
    • 太棒了,很有帮助。谢谢你现在弹出的下一个问题/错误大声笑
    猜你喜欢
    • 1970-01-01
    • 2023-01-09
    • 1970-01-01
    • 2017-09-20
    • 2012-04-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-21
    • 2012-09-10
    相关资源
    最近更新 更多