如何在 golang 中测试睡眠功能

我已经编写了自己的睡眠功能并想对其进行测试。以下是我的代码:


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的结果。如果有人可以帮助我,那就太好了。谢谢 :)


紫衣仙女
浏览 213回答 2
2回答

蝴蝶刀刀

已用时间:获取自特定时间 ( start)以来经过的时间的最简单方法是使用time.Since()返回 a的函数,该函数time.Duration具有Duration.Seconds()以秒为单位返回持续时间的方法float64。所以在你的情况下经过的秒数:sec := time.Since(start).Seconds()现在开始测试...在测试类似睡眠的函数时,您应该考虑到在睡眠之后不能保证代码会立即继续执行。例如引用自的文档time.Sleep():Sleep 将当前 goroutine 暂停至少持续时间 d。所以在为类似睡眠的函数编写测试代码时,我会这样测试:经过的时间应该至少是指定的,并允许一些误差范围。因此,例如像这样测试它:func TestSleep(t *testing.T) {&nbsp; &nbsp; const secSleep = 65.0&nbsp; &nbsp; start := time.Now()&nbsp; &nbsp; mySleepFunction(int(secSleep))&nbsp; &nbsp; sec := time.Since(start).Seconds()&nbsp; &nbsp; if sec < secSleep || sec > secSleep*1.05 {&nbsp; &nbsp; &nbsp; &nbsp; t.Error("Incorrect sleep function")&nbsp; &nbsp; }}

小怪兽爱吃肉

如果您使用 time.Unix() 为您提供自纪元(UTC 1970 年 1 月 1 日)以来的秒数,那么您的测试应该可以工作。func TestSleep(t *testing.T) {&nbsp; &nbsp; start := time.Now().Unix()&nbsp; &nbsp; mySleepFunction(65)&nbsp; &nbsp; end := time.Now().Unix()&nbsp; &nbsp; if (end - start) != 65{&nbsp; &nbsp; &nbsp; &nbsp; t.Error("Incorrect sleep function")&nbsp; &nbsp; }}目前,您的代码正在减去 time.Now() ,它不会返回您想要的结果。您的测试需要表示秒的简单 int 值。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go