首页 > 解决方案 > 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))
}

标签: kotlinjunit

解决方案


我找到了解决方案。在我的测试中。问题在于LocalDate我去写时函数提供的结果:

val testDate = LocalDate(Date()).plusDays(2).toDate()

实际上,testDate不会等于今天的日期加上 2 天,而是会在午夜停止,因此给出的结果不是当前日期加上两天,而是当前日期加上大约一天半。由于这个原因,测试失败。

要准确获取当前日期加上两天(在我的测试用例中),我不必使用它,LocalDateLocaDateTime它会返回正确的值。

此测试现在正确通过:

@Test
fun getRemainingDays() { 
    val testDate = LocalDateTime(Date()).plusDays(2).toDate()
    assertThat(viewModel.getRemainingDays(testDate), equalTo(2))
}

推荐阅读