如何在我的测试中检查方法 returns a time.ticker 是否具有指定的持续时间?

How can I check in my test that the method returns a time.ticker with the specified duration?

如何在此方法中测试正确的 return 值?

func CreateTicker(dur time.Duration) *time.Ticker {
    return time.NewTicker(dur * time.Second)
}
func TestCreateTicker(t *testing.T) {
    type args struct {
        dur time.Duration
    }
    var (
        ticker = time.NewTicker(12)
    )

    tests := []struct {
        name string
        args args
        want *time.Ticker
    }{
        {
            name: "test",
            args: args{dur: 12},
            want: ticker,
        },
    }
    for _, tt := range tests {
        t.Run(tt.name, func(t *testing.T) {
            if got := CreateTicker(tt.args.dur); !reflect.DeepEqual(got, tt.want) {
                t.Errorf("CreateTicker() = %v, want %v", got, tt.want)
            }
        })
    }
}

在我 运行 测试的那一刻,我得到了对象不相同的错误消息。

--- FAIL: TestCreateTicker (0.00s)
    --- FAIL: TestCreateTicker/test. (0.00s)
      CreateTicker() = &{0xc000062360 {824633909248 32883400129906 12000000000 0x471bc0 0xc000062360 0 0 1}}, want &{0xc0000622a0 {824633909248 32871400127913 12 0x471bc0 0xc0000622a0 0 0 1}}
FAIL
...

如果你真的想测试这个,你必须实际测量计时器发出两个滴答声需要多长时间,并检查增量是否在可接受的范围内。对于一个不是很有用的测试来说,这是很大的努力,而且你的 test-to-code 比率已经显示出相当差的 return 投资,25 行测试覆盖了 1 行函数。

更好的解决办法是不测试这个。这是调用标准库函数的单行代码,您可以假设它已经过良好测试。