【发布时间】:2014-12-16 20:49:46
【问题描述】:
我有几个字段类型为time.Time 的结构。我想知道测试它们的最佳实践是什么?我是否应该简单地将 time.Time 字段设置为 nil 并测试结构的其余部分(即 reflect.DeepEqual)?否则有没有办法使时间确定?
给定下面的函数,你会如何测试它?
type mystruct struct {
s string
time time.Time
}
// myfunc receives a string and returns a struct of type mystruct
// with the same string and the current time.
func myfunc(s string) mystruct {
return mystruct{s: s, time: time.Now()}
}
【问题讨论】:
-
这是一个奇怪的问题:为什么不直接测试它们呢? time.Time 怎么可能是零呢?它不能。
-
测试是什么意思?测试两次是否相同?你可以使用 time.Equal
-
不要尝试测试
time.Now()。 time 包有自己的单元测试。 -
如果您想检查用户是否没有设置时间,那么只需检查该字段:
mystruct.time.IsZero()。有时您无法将结构作为一个整体进行比较。为你想要的结构创建一个Equal方法。 -
看看 net/http/cookiejar 如何进行包括时间戳在内的测试:让实际函数有一个
now参数,该参数在代码中设置为 time.Now(),但允许传入合成时间测试。
标签: unit-testing testing time go mocking