【发布时间】:2014-02-23 03:36:57
【问题描述】:
我希望您能就使用 time.Ticker 测试代码的正确方法提出建议
例如,假设我有一个如下所示的倒数计时器(只是我为解决这个问题而想出的一个例子):
type TickFunc func(d time.Duration)
func Countdown(duration time.Duration, interval time.Duration, tickCallback TickFunc) {
ticker := time.NewTicker(interval)
for remaining := duration; remaining >= 0; remaining -= interval {
tickCallback(remaining)
<-ticker.C
}
ticker.Stop()
}
http://play.golang.org/p/WJisY52a5L
如果我想对此进行测试,我想提供一个模拟,以便我可以进行快速且可预测的测试,因此我需要找到一种方法让我的模拟进入 Countdown 函数。
我可以想到几种方法来做到这一点:
创建一个 Ticker 接口和一个包内部的第一类函数,我可以为测试目的打补丁:http://play.golang.org/p/oSGY75vl0U
创建一个 Ticker 接口并将实现直接传递给 Countdown 函数: http://play.golang.org/p/i67Ko5t4qk
如果我采用后一种方式,我是否会透露太多有关 Countdown 工作原理的信息,并让潜在客户更难使用此代码?他们必须构造并传入一个 Ticker,而不是给出一个持续时间和间隔。
我很想知道在测试这样的代码时最好的方法是什么?或者您将如何更改代码以保留行为,但使其更具可测试性?
感谢您的帮助!
【问题讨论】:
标签: go