在使用 LocalDate 的 kotlin 中测试包级函数

Testing Package-level function in kotlin which uses LocalDate

我有 DateUtil.kt 个文件,其中包含。

fun getFirstDayOfTheWeek(): String {

    val firstDay: LocalDate = LocalDate.now(ZoneId.of(DateConstants.IST_ZONE_ID))
            .with(TemporalAdjusters.previousOrSame(DayOfWeek.MONDAY))
    return firstDay.toString()
}

我如何测试这个?没有 class,只有功能。使用 spring 引导, @ExtendWith(SpringExtension.class) 工作在 class 级别。

我是否仍应为它创建一个 DateUtilTest class,或者是否可以在不创建 class 的情况下进行测试?

@ExtendWith(SpringExtension::class)
class DateUtilsTest {

    @Test
    fun getFirstDayOfTheWeekTest() {

    }
}

此外,有人可以帮忙测试一下这个功能吗?我应该模拟 LocalDate 库吗?

您不需要 SpringExtension 来测试简单的非 spring 代码。您只需要在 class 中进行简单测试。

设计此类功能时需要考虑几件事。 LocalDate.now() 使函数 不纯 。相反,这个日期应该作为函数的参数出现,这样更容易测试。使用 Kotlin,您可以使用默认值进行初始化,因此函数调用者的签名不会更改。

fun getFirstDayOfTheWeek(date: LocalDate = LocalDate.now()): String {

  val firstDay: LocalDate = date.with(TemporalAdjusters.previousOrSame(DayOfWeek.MONDAY))
  return firstDay.toString()
}

class DateUtilKt {

  @Test
  fun testFirstDayOfTheWeek() {
    val day = getFirstDayOfTheWeek(LocalDate.of(2020, 5,22))
    assertEquals("2020-05-18", day)
  }
}