1 回答

TA贡献1818条经验 获得超8个赞
ThreeTen-Android Backport 向不支持 Java 8 的 Android 系统提供了 Java SE 8 日期时间类的向后移植。 这个问题的原因是单元测试在 JVM 上运行,而不是 Android开发者所说的:
仅在本地计算机上运行的单元测试。这些测试被编译为在 Java 虚拟机 (JVM) 上本地运行,以最大限度地减少执行时间。如果您的测试依赖于 Android 框架中的对象,我们建议使用 Robolectric。对于依赖于您自己的依赖项的测试,请使用模拟对象来模拟您的依赖项的行为。
Jake Wharton(ThreeTen-Android Backport 所有者)关于没有通过 Robolectric 建立资源说:
这是一个 Robolectric 错误。要么向他们报告,要么切换到在单元测试中使用普通的 ThreeTenBP。或两者!
因此,我们应该使用原始 ThreeTen Backport 库来解决这个问题。所以我们应该将它的依赖添加到build.gradle单元测试要使用的文件中。
在 build.gradle 文件中:
dependencies {
implementation 'com.jakewharton.threetenabp:threetenabp:1.1.1'
testImplementation ('org.threeten:threetenbp:1.3.2'){
exclude group:'com.jakewharton.threetenabp', module:'threetenabp'
}
}
在单元测试类中:
@Test
public void advanceByMax1HourWithoutOverflow() {
/*
27 October 2018
1540648800000 -> 1540652400000
22:00 -> 23:00
*/
long currentTimeMillis = 1540648800000L;
long expected = 1540652400000L;
long output = Utils.advanceByMax1HourWithoutOverflow(currentTimeMillis);
assertEquals(expected, output);
}
结果:
添加回答
举报