【问题标题】:Testing Package-level function in kotlin which uses LocalDate在使用 LocalDate 的 kotlin 中测试包级函数
【发布时间】:2020-05-21 19:03:37
【问题描述】:

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

fun getFirstDayOfTheWeek(): String {

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

我该如何测试呢?没有类,只有函数。使用弹簧靴, @ExtendWith(SpringExtension.class) 在班级级别工作。

我还是应该为它创建一个 DateUtilTest 类,还是有办法在不创建类的情况下进行测试?

@ExtendWith(SpringExtension::class)
class DateUtilsTest {

    @Test
    fun getFirstDayOfTheWeekTest() {

    }
}

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

【问题讨论】:

  • 如果您使用的是 JUnit,您可以像平常一样调用该方法,对吧?
  • 所以该方法不需要输入,所以没有前置条件,但您可能需要一些模拟。当您在测试中执行此方法时,您期望什么后置条件/结果?
  • 该方法返回一周的最后一个星期一。只测试这种方法是否有意义?

标签: java unit-testing kotlin functional-programming localdate


【解决方案1】:

您不需要SpringExtension 来测试简单的非弹簧代码。您只需要在课堂上进行简单的测试。

在设计此类功能时要考虑几件事情。 LocalDate.now() 使函数不纯。相反,这个 Date 应该作为函数的参数,所以更容易测试。使用 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)
  }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-12-06
    • 1970-01-01
    • 2019-10-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多