gpt4 book ai didi

go - 在测试golang期间 stub time.Now()?

转载 作者:行者123 更新时间:2023-12-01 22:00:21 25 4
gpt4 key购买 nike

我在这里关注另一个答案:Is there an easy way to stub out time.Now() globally during test?
因此,我在此文件中执行以下操作:

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()
}
我收到此错误 cannot use func literal (type func() int64) as type func() time.Time in assignment。我需要能够返回一个int64类型(我的原始函数返回该类型),如何解决这个问题?
随时向我指出文档,我是Go新手!!

最佳答案

time.Now() 是一个返回 time.Time 类型的值的函数:

func Now() Time
因此 timeNow的类型就是这种类型的函数: func() time.Time。这显然与 func() int64不同。
您必须返回 time.Time值。如果您想返回代表特定Unix时间的 time.Time值,则可以使用 time.Unix() 函数获取该值,例如
unixsec := int64(1605139200) // This is 2020-11-12 00:00:00 +0000 UTC

timeNow = func() time.Time {
return time.Unix(unixsec, 0)
}
如果要返回特定的日期时间,则可以使用 time.Date() ,例如:
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秒的时间值(与上一次调用返回的值相比)。

关于go - 在测试golang期间 stub time.Now()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63961955/

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