如何修复 Go 测试输出中的行号?

让我们考虑这个简单的测试代码。


(注意:assertSomething这里非常简单,但通常我会为手头的任务编写一个更专业的帮助程序,它会查看多种情况并报告不止一种类型的错误。)


package hello


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.Error("Something's not right") // line 12

    }

}

当我运行时go test,我得到以下信息:


--- FAIL: TestFoo (0.00s)

    hello.go:12: Something's not right

FAIL

exit status 1

FAIL    kos/hello   0.008s

我有两个问题:


1) 错误指向第 12 行 - 为什么?如何t.Error找出它是从哪一行调用的?


2)在帮助器中,我想指定t.Error应该看起来更高的堆栈级别以确定要打印的行号,以便我会收到如下消息:


--- FAIL: TestFoo (0.00s)

    hello.go:7: Something's not right

Python 允许我这样做,例如,在warnings.warn("message", stacklevel=2)- 我将如何在这里实现等价物?


收到一只叮咚
浏览 193回答 2
2回答

蝴蝶刀刀

自 go 1.9 以来,情况发生了变化。Helper()方法已添加到testing.T和testing.B。它旨在从测试助手中调用,例如assertSomething表明该函数是一个助手,我们对来自它的行号不感兴趣。package mainimport "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 rightFAIL您也可以在 Go Playground 上尝试。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go