当前位置: > > > > 在测试 golang 期间存根 time.Now() ?
在测试 golang 期间存根 time.Now() ?
来源:stackoverflow
2024-05-01 15:15:39
0浏览
收藏
“纵有疾风来,人生不言弃”,这句话送给正在学习Golang的朋友们,也希望在阅读本文《在测试 golang 期间存根 time.Now() ?》后,能够真的帮助到大家。我也会在后续的文章中,陆续更新Golang相关的技术文章,有好的建议欢迎大家在评论留言,非常感谢!
问题内容
我在这里遵循另一个答案:是否有一种简单的方法可以在测试期间全局删除 time.now() ?
所以我有这个文件,我可以在其中执行以下操作:
var timenow = time.now
func generatetimestamp() int64 {
now := timenow() // current local time
sec := now.unix() // number of seconds since january 1, 1970 utc
return sec // int 64
}
我们在另一个函数中使用generatetimestamp()
func addts() {
// some if check, use generatetimestamp() here
}
现在在我的测试文件中,我正在执行以下操作:
now := time.Now()
timeNow = func() int64 {
// fmt.Println("looking for this", now.Unix())
return now.Unix()
}
我收到此错误 不能使用 func 文字(类型 func() int64)作为类型 func() time.time 在赋值 中。我需要能够返回 int64 类型(我的原始函数返回),我该如何解决这个问题?
请随时向我指出文档,我是 go 新手!!
解决方案
是一个返回 类型值的函数:
func now() time
所以timenow的类型是这种类型的函数:func() time.time。这与 func() int64 明显不同。
您必须返回 time.time 值。如果您想返回代表特定unix时间的 time.time 值,您可以使用 函数来获取该值,例如
unixsec := int64(1605139200) // this is 2020-11-12 00:00:00 +0000 utc
timenow = func() time.time {
return time.unix(unixsec, 0)
}
如果您想返回特定的日期时间,可以使用 ,例如:
timenow = func() time.time {
return time.date(2020, 11, 12, 0, 0, 0, 0, time.utc)
}
当然,您不限于始终返回同一时间点。您可以在每次调用时返回递增的时间值,例如:
unixsec := int64(1605139200) // This is 2020-11-12 00:00:00 +0000 UTC
timeNow = func() time.Time {
unixsec++ // Increment number of seconds by 1
return time.Unix(unixsec, 0)
}
此 timenow 函数将返回一个始终增加 1 秒的时间值(与上一次调用返回的值相比)。
以上就是《在测试 golang 期间存根 time.Now() ?》的详细内容,更多关于的资料请关注米云公众号!
