为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
收到一只叮咚 2021-09-20 14:38:44
让我们考虑这个简单的测试代码。(注意: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 上尝试。


查看完整回答
反对 回复 2021-09-20
  • 2 回答
  • 0 关注
  • 188 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信