Vru*_*shi 6 unit-testing sleep go
我已经编写了自己的睡眠功能,想要测试它.以下是我的代码:
func TestSleep(t *testing.T) {
start := time.Now()
mySleepFunction(65)
end := time.Now()
if (end - start) != 65 {
t.Error("Incorrect sleep function")
}
}
Run Code Online (Sandbox Code Playgroud)
这不起作用.我正在尝试获取开始时间和结束时间,然后将其与预期时间进行比较.预计时间将以秒为单位.我试过end.Sub(start)但是这会给我一些回报1m30.0909,而不是我需要90的结果.如果有人可以帮助我会很棒.谢谢 :)
icz*_*cza 11
经过的时间:
从特定时间(start)开始经过的最简单时间是使用time.Since()返回a 的函数,该函数time.Duration有一个Duration.Seconds()以秒为单位返回持续时间的方法float64.
所以在你的情况下经过的秒数:
sec := time.Since(start).Seconds()
Run Code Online (Sandbox Code Playgroud)
现在开始测试......
在测试类似睡眠的函数时,您应该考虑到睡眠后不能保证代码会立即继续执行.例如,引用文档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")
}
}
Run Code Online (Sandbox Code Playgroud)
如果您使用 time.Unix() 给出自纪元(UTC 1970 年 1 月 1 日)以来的秒数,那么您的测试应该可以工作。
func TestSleep(t *testing.T) {
start := time.Now().Unix()
mySleepFunction(65)
end := time.Now().Unix()
if (end - start) != 65{
t.Error("Incorrect sleep function")
}
}
Run Code Online (Sandbox Code Playgroud)
目前,您的代码正在减去 time.Now() ,它不会返回您想要的结果。您的测试需要代表秒的简单 int 值。