有一个对象依赖于计时来正确运行。不幸的是,定时持续时间本身太长,不能实时对其进行实时测试,缩短持续时间会因测试对象的性质而影响测试的目的。涉及时间的Golang测试程序
测试此类对象的最佳方法是什么?理想情况下,会有一些虚拟时钟可以任意快速运行,可以使用。
type Obj struct{}
func (o Obj) TimeCriticalFunc(d time.Duration) bool {
//do stuff
//possibly calling multiple times time.Now() or other real time related functions
}
func TestTimeCriticalFunc(t *testing.T) {
if !Obj{}.TimeCriticalFunc(10 * 24 * time.Hour) {
t.Fail()
}
}
使用代表挂钟时间明显的参数。在测试过程中,您可以快速前进这段时间。看看package net/http/cookiejar是如何做到的。 – Volker
这种方法需要修改函数本身,但我不太愿意这样做。还带来了一个问题,如果我要测试一些涉及我没有代码的函数的东西,我会很无奈 –
也许这些类型的对象应该总是有一个显式的参数来表示时间。最后可能会这样做,但我确实认为这是最后的手段 –