在Golang中的受测函数中创建日志函数的真实模拟/间谍

时间:2018-08-03 15:28:46

标签: unit-testing go

在受测试的API中,有一些功能和方法都可以简单地打印内容。以这两种方法为例:

func TimeTrack(start time.Time, name string) {
    elapsed := time.Since(start)
    log.Printf("%s took %s", name, elapsed)
}

func (tt *TimeTrackSt) PrintLaps() {
    elapsed := time.Since(tt.startDT)
    log.Printf("%s took %s", tt.name, elapsed)
    lapsStr := ""
    for _, v := range tt.laps {
        lapsStr += fmt.Sprintf("\n%s:\t%s", v.name, v.dur)
    }
    log.Printf("Laps %s", lapsStr)
}

我的直觉是尝试创建包含这些方法的那些函数和对象的模拟。我找到了一些代码,theoretically should work。问题是他们最终重写了整个功能,改为使用模拟打印功能。我正在使用the testify dependency,其中包含一个entire package devoted to mocks。问题在于,如果不重构或重复测试中的函数/方法,就无法使模拟的函数按模拟打印方法而不是真实的打印方法。

失败了,我尝试将打印功能更改为测试功能,然后defer将它们还原,但是我cannot assign to log.Println

我该怎么办?

0 个答案:

没有答案