我目前正在编写一个与字符串进行比较的单元测试。第一个字符串是使用函数生成的。另一个是硬编码的,可作为参考。我的问题是,创建第一个字符串的函数会将当前时间(time.Now())精确地以秒为单位注入字符串。目前我也做同样的参考,但这对我来说似乎很难看。我的机器运行得足够快,以便测试通过,但我不想依赖它。
进行此类测试的一般技术是什么?
答案 0 :(得分:1)
您可以通过time.Now()
函数将_test.go
文件中的init()
等函数存根,这将给出确定的时间值:
package main
import (
"fmt"
"time"
)
var timeNow = time.Now
func main() {
fmt.Println(timeNow())
}
func init() {
// Uncomment and add to _test.go init()
// timeNow = func() time.Time {
// t, _ := time.Parse("2006-01-02 15:04:05", "2017-01-20 01:02:03")
// return t
// }
}
答案 1 :(得分:0)
我们可以使用 go 包 "github.com/tkuchiki/faketime" 来存根 time.Now()。
package main
import (
"fmt"
"github.com/tkuchiki/faketime"
"time"
)
func main() {
fmt.Println("Current Time Before Faking : ", time.Now().UTC())
f := faketime.NewFaketime(2021, time.March, 01, 01, 01, 01, 0, time.UTC)
defer f.Undo()
f.Do()
fmt.Println("Current Time After Faking : ", time.Now())
}
上面代码的输出是:
Current Time Before Faking : 2009-11-10 23:00:00 +0000 UTC
Current Time After Faking : 2021-03-01 01:01:01 +0000 UTC
检查示例代码:go-playground sample