为了账号安全,请及时绑定邮箱和手机立即绑定

如何在 golang 中测试睡眠功能

如何在 golang 中测试睡眠功能

Go
紫衣仙女 2021-11-08 15:49:23
我已经编写了自己的睡眠功能并想对其进行测试。以下是我的代码: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的结果。如果有人可以帮助我,那就太好了。谢谢 :)
查看完整描述

2 回答

?
蝴蝶刀刀

TA贡献1801条经验 获得超8个赞

已用时间:


获取自特定时间 ( start)以来经过的时间的最简单方法是使用time.Since()返回 a的函数,该函数time.Duration具有Duration.Seconds()以秒为单位返回持续时间的方法float64。


所以在你的情况下经过的秒数:


sec := time.Since(start).Seconds()

现在开始测试...


在测试类似睡眠的函数时,您应该考虑到在睡眠之后不能保证代码会立即继续执行。例如引用自的文档time.Sleep():


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")

    }

}


查看完整回答
反对 回复 2021-11-08
?
小怪兽爱吃肉

TA贡献1852条经验 获得超1个赞

如果您使用 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")

    }

}

目前,您的代码正在减去 time.Now() ,它不会返回您想要的结果。您的测试需要表示秒的简单 int 值。


查看完整回答
反对 回复 2021-11-08
  • 2 回答
  • 0 关注
  • 212 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信