我最近通过Peter Van Der Linden查看了Expert C编程,并发现了+ =运算符的这种用法:
"如果您有一个复杂的数组引用,并且您想要证明两个引用都使用相同的索引,那么:
node[i >> 3] += ~(0x01 << (i & 0x7));
Run Code Online (Sandbox Code Playgroud)
是要走的路."
尽管我已经尝试过,但我无法弄清楚这段代码.我希望这里有人可以解释实际发生的事情以及为什么可以用来证明使用相同的索引?
我希望您就测试使用 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()
}
Run Code Online (Sandbox Code Playgroud)
http://play.golang.org/p/WJisY52a5L
如果我想测试这个,我想提供一个模拟,以便我可以快速和可预测地运行测试,所以我需要找到一种方法让我的模拟进入倒计时功能。
我可以想到几种方法来做到这一点:
创建一个 Ticker 接口和一个包内部的第一类函数,我可以为了测试的目的修补它:http : //play.golang.org/p/oSGY75vl0U
创建一个 Ticker 接口,并将一个实现直接传递给 Countdown 函数:http : //play.golang.org/p/i67Ko5t4qk
如果我采用后一种方式,我是否透露了太多有关 Countdown 工作原理的信息,并使潜在客户更难使用此代码?他们不必给出持续时间和间隔,而是必须构建并传入一个 Ticker。
我很想知道在测试这样的代码时最好的方法是什么?或者您将如何更改代码以保留行为,但使其更易于测试?
谢谢你的帮助!