在测试golang期间存根time.Now? 所以我在此文件中执行以下操作:我们在另一个函数中使用了GenerateTimestamp现在在我的测试文件中,我正在执行以下操作:

问题描述

我在这里关注另一个答案: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,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秒的时间值(与上一次调用返回的值相比)。

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...