Kotlin 如何在测试中覆盖常量



只是把它扔在那里,希望除了明显的低于标准的答案之外有一个干净的答案。

我有一个类,它将在常量中定义的设定时间段后触发。在我的测试中,我希望时间更短,以便测试运行得更快。有没有办法覆盖测试中的常量?

当前丑陋的解决方案是我正在更改代码,以便延迟时间作为参数传递,这很丑陋,因为此参数只会在测试中使用。

const val DELAY_BEFORE_CODE_MILLIS: Long = 300000
class CheckValues(
private val vertx: Vertx
) {

fun doStuff() {
vertx.setTimer(DELAY_BEFORE_AGGREGATION_CHECK_MILLIS) {
<code i want to test>
}
...
}

一种解决方案是在doStuff()函数中传递延迟时间。您可以将DELAY_BEFORE_AGGREGATION_CHECK_MILLIS作为默认参数,这样调用方就不必每次都传递延迟时间

fun doStuff(delayMillis: Long = DELAY_BEFORE_AGGREGATION_CHECK_MILLIS) {
vertx.setTimer(delayMillis) {
<code i want to test>
}

在测试中,您可以通过任何您想要的延迟。

这是更干净的代码和测试的一般经验法则。不是在类或函数内部创建依赖项,而是将它们作为构造函数或函数参数传递。

最新更新