AndroidThreeTen 在没有 robolectric 的情况下无法在单元测试中工作?

标签 android unit-testing testing kotlin robolectric

我无法在不需要 robolectric 的情况下创建单元测试。我在我的代码中使用 AndroidThreeTen.init(this) 并且当我运行我的测试时如果我禁用 robolectric 我得到一个错误: org.threeten.bp.zone.ZoneRulesException:没有注册时区数据文件

如果我启用它,我会得到这个: [Robolectric] com.mycomp.,yapp.utilities.log.LogTest.on 调用函数返回 Int:sdk=28;资源=二进制

我试过使用 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,而是我自己的类)(已编辑)

最佳答案

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 规则;几年来一直如此。

关于AndroidThreeTen 在没有 robolectric 的情况下无法在单元测试中工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55340569/

相关文章:

android - 如何获得专辑封面? ALBUM_ART 列索引为 -1

android - 获取 Activity 经理的状态

c# - .NET 核心 2.2 : xUnit Theory Inlinedata not working with enum values

python - 如何对 os.walk 触发错误处理程序进行单元测试?

ruby-on-rails - cucumber 测试停止

android - android中的组表是什么?

unit-testing - 涉及多个类的单元测试逻辑

azure - Azure队列中的Mocking ExecutionContext触发功能单元测试

sql - RSpec:伪造的 SQL 错误?

android - 如何使用ffmpeg在android中的视频上添加gl过渡?