我已经编写了自己的睡眠功能并想测试它。以下是我的代码:
func TestSleep(t *testing.T) {
start := time.Now()
mySleepFunction(65)
end := time.Now()
if (end - start) != 65 {
t.Error("Incorrect sleep function")
}
}
这不起作用。我正在尝试获取开始时间和结束时间,然后将其与预期时间进行比较。预计时间将以秒为单位。我尝试end.Sub(start)
,但这会返回1m30.0909
之类的内容,而我需要90
。如果有人可以帮助我会很棒。
谢谢:))
答案 0 :(得分:11)
经过时间:
最容易获得自特定时间(start
)以来经过的时间是使用time.Since()
函数,该函数返回time.Duration
,其中Duration.Seconds()
方法返回以float64
为单位的持续时间(秒)。
所以在你的情况下,经过的秒数:
sec := time.Since(start).Seconds()
现在开始测试......
在测试类似睡眠的函数时,您应该考虑到睡眠后不能保证代码会立即继续执行。例如,引用time.Sleep()
的文档:
睡眠暂停当前goroutine 至少持续时间d。
因此,当为类似睡眠的函数编写测试代码时,我会像这样测试:
所以例如测试它是这样的:
func TestSleep(t *testing.T) {
const secSleep = 65.0
start := time.Now()
mySleepFunction(int(secSleep))
sec := time.Since(start).Seconds()
if sec < secSleep || sec > secSleep*1.05 {
t.Error("Incorrect sleep function")
}
}
答案 1 :(得分:1)
如果你使用time.Unix(),它给你自纪元(1970年1月1日,1970年)以来的秒数,那么你的测试应该有效。
func TestSleep(t *testing.T) {
start := time.Now().Unix()
mySleepFunction(65)
end := time.Now().Unix()
if (end - start) != 65{
t.Error("Incorrect sleep function")
}
}
目前,您的代码正在减去time.Now(),它不会返回您想要的结果。您的测试需要表示秒的简单int值。