Kotlinv2.4.0

可测试性

除了测试你的库外,还要确保使用你的库的代码也是可测试的。

避免全局状态和有状态的顶级函数

你的库不应依赖全局变量中的状态,也不应在公共 API 中提供有状态的顶级函数。 此类变量和函数会使测试使用该库的代码变得困难,因为测试需要寻找方法来控制这些全局值。

例如,一个库可能会定义一个可全局访问的函数,用于提供对当前时间的访问:

kotlin
val instant: Instant = Clock.now()
println(instant)

任何使用此 API 的代码都将难以进行测试,因为对 now() 函数的调用将始终返回真实的当前时间,而在测试中通常希望返回虚假值(fake values)。

为了实现可测试性,kotlinx-datetime 库提供了一个 API,允许用户获取 Clock 实例,然后使用该实例获取当前时间:

kotlin
val clock: Clock = Clock.System
val instant: Instant = clock.now()
println(instant)

这允许库的用户将 Clock 实例注入到他们自己的类中,并在测试期间将真实实现替换为虚假实现。

后续步骤

如果你还没有阅读过,请考虑查看以下页面: