可测试性
除了测试你的库之外,还要确保使用你的库的代码也是可测试的。
避免全局状态和有状态的顶层函数
你的库不应该依赖全局变量中的状态,也不应该提供有状态的顶层函数作为其公共 API 的一部分。 这类变量和函数使得测试使用该库的代码变得困难,因为测试需要找到控制这些全局值的方法。
例如,一个库可能会定义一个全局可访问的函数,用于提供对当前时间的访问:
kotlin
val instant: Instant = Clock.now()
println(instant)
任何使用此 API 的代码都将难以测试,因为对 now()
函数的调用将始终返回真实的当前时间,而在测试中通常需要返回模拟值。
为了实现可测试性,kotlinx-datetime
库提供了一个 API,允许用户获取一个 Clock
实例,然后使用该实例获取当前时间:
kotlin
val clock: Clock = Clock.System
val instant: Instant = clock.now()
println(instant)
这使得库的用户可以将其 Clock
实例注入到他们自己的类中,并在测试期间用模拟实现替换真实实现。
接下来
如果你还没有这样做,请考虑查阅以下页面: