unit-testing - 测试基于时间的字段是否有意义? (戈朗)

标签 unit-testing testing time go mocking

我有几个字段类型为 time.Time 的结构。我想知道测试它们的最佳做法是什么?我是否应该简单地将 time.Time 字段设置为 nil 并测试结构的其余部分(即 reflect.DeepEqual)?否则有没有办法让时间确定? 给定以下功能,您将如何测试它?

type mystruct struct {
    s string
    time time.Time
}

// myfunc receives a string and returns a struct of type mystruct
// with the same string and the current time.
func myfunc(s string) mystruct {
   return mystruct{s: s, time: time.Now()}
}

最佳答案

如果您需要为 time.Now() 创建一个假的,您可以创建 TimeProvider 并使用它来获取实时的。Now() 或伪造它。

这是一个非常简单的例子

package main

import (
    "fmt"
    "time"
)

type TimeProvider interface {
    Now() time.Time
}

type MyTimeProvider struct{}

func (m *MyTimeProvider) Now() time.Time {
    return time.Now()
}

type FakeTimeProvider struct {
    internalTime time.Time
}

func (f *FakeTimeProvider) Now() time.Time {
    return f.internalTime
}
func (f *FakeTimeProvider) SetTime(t time.Time) {
    f.internalTime = t
}

func main() {
    var t MyTimeProvider
    f := FakeTimeProvider{t.Now()}
    fmt.Println(t.Now())
    fmt.Println(f.Now())
}

关于unit-testing - 测试基于时间的字段是否有意义? (戈朗),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27513690/

相关文章:

c# - 重复的单元测试可以吗?

java - 加密/解密单元测试

c# - 在 C# (web api) 中测试经过身份验证的方法(使用不记名 token )的正确方法

testing - 对于给定的以下场景,需要正面和负面的测试用例

unit-testing - Apache Hive 中的自动化测试

unit-testing - 如何进行仅在断言失败时通过的测试?

python - 如何使用 nosetests 测试函数在函数内被调用

java - 查找时差

powershell - 在PowerShell中显示带有时区的当前时间

python如何从csv文件更改时间格式