kotlin - Android Studio 单元测试 | Days.daysBetween 随机失败
问题描述
我无法理解为什么以下测试有时会失败,而其他时候却有效。我想要得到的是一个日期剩下的天数。它有时似乎有效,但有时却无效。这是因为它没有像建议的那样计算天数,而是少了一个,我不明白为什么它有时有效,有时无效。
这里的功能:
internal fun getRemainingDays(itemDate: Date): Int? {
if (itemDate == null) return null
return Days.daysBetween(LocalDate(Date()), LocalDate(itemDate)).days
}
这是我的测试:
@Test
fun getRemainingDays() {
val testDate = LocalDate(Date()).plusDays(2).toDate()
assertThat(viewModel.getRemainingDays(testDate), equalTo(2))
}
解决方案
我找到了解决方案。在我的测试中。问题在于LocalDate
我去写时函数提供的结果:
val testDate = LocalDate(Date()).plusDays(2).toDate()
实际上,testDate
不会等于今天的日期加上 2 天,而是会在午夜停止,因此给出的结果不是当前日期加上两天,而是当前日期加上大约一天半。由于这个原因,测试失败。
要准确获取当前日期加上两天(在我的测试用例中),我不必使用它,LocalDate
但LocaDateTime
它会返回正确的值。
此测试现在正确通过:
@Test
fun getRemainingDays() {
val testDate = LocalDateTime(Date()).plusDays(2).toDate()
assertThat(viewModel.getRemainingDays(testDate), equalTo(2))
}
推荐阅读
- c# - ASP.NET webforms - 将视图状态保存到数据库 - 视图状态验证不起作用
- parallel-processing - 使用 JMS 进行 Spring Batch 并行处理
- r - 如何在 R 中创建“逻辑与”列联表?
- swift - 使用多个类控制单个 SKScene
- android - 当我使用 FirebaseRecyclerAdapter 时如何在回收器视图中隐藏空行
- javascript - 如何打开所有顶级手风琴但保持嵌套手风琴关闭?
- node.js - sequelize 和 react 不会在没有错误的情况下连接 postgresql
- reactjs - 使用道具从另一个动作分派一个动作(Redux)
- google-apps-script - 在循环抛出错误中嵌套 IF 语句
- javascript - 隐藏部分输入作为密码