我想包装标准的 golang 测试函数,例如 testing 包中的 t.Errorf

我试过这个:

// AssertEqual tests that the expected and actual values match
func AssertEqual(t *testing.T, expected interface{}, actual interface{}) {
    switch expected.(type) {
    case string:
        if expected != actual {
            t.Errorf("Error:\nexpected: %s\nactual: %s", expected, actual)
        }
    default:
        t.Errorf("Unsupported type")
    }
}

但是,当测试失败时,我会得到辅助函数的函数和行号:
test_asserts.go:12: Error:
    expected:
    actual: TestValue

有没有办法在调用者的行号处出错?

最佳答案

这是测试库的工作方式:
https://golang.org/src/testing/testing.go?h=Errorf#L285

通过使用 runtime.Caller

您可以为自己的错误函数借用这段代码,以便更深入地了解堆栈。您可以替换整个 Errorf (即 log + fail ),或者在调用 debug.PrintStack() 之前使用 Errorf 之类的东西打印整个堆栈,但代码更少。

关于go - 如何包装 golang 测试函数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39194816/

10-13 04:10