猿问

为什么golang测试包在报告测试失败时用下划线替换空格?

当我运行此测试但失败时:


func TestCaseA(t *testing.T){

    t.Run("my name with spaces", func (t *testing.T){

        t.Error("some error message")

    })

}

然后在输出中修改测试的名称(空格更改为下划线):


--- FAIL: TestCaseA (0.00s)

    --- FAIL: TestCaseA/my_name_with_spaces (0.00s)

        main.go:10: some error message

FAIL

为什么要这样做?


这是一个工作示例:https ://play.golang.org/p/viZjC60Dazg


RISEBY
浏览 99回答 2
2回答

qq_花开花谢_0

子测试或子基准的全名是一个以斜杠分隔的名称及其所有父级名称的列表,从顶级开始。该名称是顶级测试和基准测试的相应函数名称,否则是 Run 的第一个参数。为了避免显示和解析问题,通过用下划线替换空格并转义不可打印的字符来清理名称。相同的清理应用于传递给 -run 或 -bench 标志的正则表达式。一些示例可能是使自动化工具更简单地处理测试输出,避免 shell 使包含空格的正则表达式参数显示为多个参数等问题。我宁愿避免使用空格也不愿处理这种神奇的重命名。

尚方宝剑之说

当然,我在代码本身中找到了我能找到的最明确的答案。函数rewrite注释如下rewrite 将子名称重写为只有可打印字符且没有空格。至于为什么?至于为什么,也许是因为在cli中引用不带空格的名称更容易?空格对 cli 不利。
随时随地看视频慕课网APP

相关分类

Go
我要回答