让我们考虑这个简单的测试代码。(注意:assertSomething这里非常简单,但通常我会为手头的任务编写一个更专业的帮助程序,它会查看多种情况并报告不止一种类型的错误。)package helloimport "testing"func TestFoo(t *testing.T) { assertSomething(t, 2+2 == 4) // line 6 assertSomething(t, 2+3 == 6) // line 7}func assertSomething(t *testing.T, expected bool) { if !expected { t.Error("Something's not right") // line 12 }}当我运行时go test,我得到以下信息:--- FAIL: TestFoo (0.00s) hello.go:12: Something's not rightFAILexit status 1FAIL kos/hello 0.008s我有两个问题:1) 错误指向第 12 行 - 为什么?如何t.Error找出它是从哪一行调用的?2)在帮助器中,我想指定t.Error应该看起来更高的堆栈级别以确定要打印的行号,以便我会收到如下消息:--- FAIL: TestFoo (0.00s) hello.go:7: Something's not rightPython 允许我这样做,例如,在warnings.warn("message", stacklevel=2)- 我将如何在这里实现等价物?
2 回答
蝴蝶刀刀
TA贡献1801条经验 获得超8个赞
自 go 1.9 以来,情况发生了变化。
Helper()方法已添加到testing.T和testing.B。它旨在从测试助手中调用,例如assertSomething表明该函数是一个助手,我们对来自它的行号不感兴趣。
package main
import "testing"
func TestFoo(t *testing.T) {
assertSomething(t, 2+2 == 4) // line 6
assertSomething(t, 2+3 == 6) // line 7
}
func assertSomething(t *testing.T, expected bool) {
if !expected {
t.Helper()
t.Error("Something's not right") // line 12
}
}
输出包含正确的行号:
=== RUN TestFoo
--- FAIL: TestFoo (0.00s)
main.go:7: Something's not right
FAIL
您也可以在 Go Playground 上尝试。
- 2 回答
- 0 关注
- 188 浏览
添加回答
举报
0/150
提交
取消