只是把它扔在那里,希望除了明显的低于标准的答案之外有一个干净的答案。
我有一个类,它将在常量中定义的设定时间段后触发。在我的测试中,我希望时间更短,以便测试运行得更快。有没有办法覆盖测试中的常量?
当前丑陋的解决方案是我正在更改代码,以便延迟时间作为参数传递,这很丑陋,因为此参数只会在测试中使用。
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>
}
在测试中,您可以通过任何您想要的延迟。
这是更干净的代码和测试的一般经验法则。不是在类或函数内部创建依赖项,而是将它们作为构造函数或函数参数传递。