gpt4 book ai didi

testing - 涉及时间的 Golang 测试程序

转载 作者:IT王子 更新时间:2023-10-29 00:55:26 29 4
gpt4 key购买 nike

有一个对象依赖于计时来正常运行。不幸的是,计时持续时间本身太长,无法实时对其进行实际测试,并且由于对象的性质,缩短持续时间违背了测试的目的。

测试此类对象的最佳方法是什么?理想情况下,会有一些可以使用的任意快运行的虚拟时钟。

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()
}
}

最佳答案

这实际上在 Andrew Gerrand 的 Testing Techniques talk 中得到了解答。 .在你的代码中做

var (
timeNow = time.Now
timeAfter = time.After
)

// ...

type Obj struct{}
func (o Obj) TimeCriticalFunc(d time.Duration) bool {
// Call timeAfter and timeNow.
}

在你的测试中做

func TestTimeCriticalFunc(t *testing.T) {
timeNow = func() time.Time {
return myTime // Some time that you need
}
// "Redefine" timeAfter etc.
if !Obj{}.TimeCriticalFunc(10 * 24 * time.Hour) {
t.Fail()
}
}

关于testing - 涉及时间的 Golang 测试程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39591037/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com