当我运行此测试时,它失败了:
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
答案 0 :(得分:3)
我在代码本身中找到了我能找到的最明确的答案。 rewrite
函数注释为
rewrite将一个子名称重写为仅具有可打印字符且没有空格。
https://golang.org/src/testing/match.go#L133
为什么?我猜JimB用他的评论打在了头上。
为什么,也许是因为在cli中没有空格的情况下引用名称更容易?
空格对cli不利。
答案 1 :(得分:2)
此博客文章对此进行了解释:https://blog.golang.org/subtests
子测试或子基准的全名是其名称及其所有父代名称的斜杠列表,从顶层开始。该名称是顶级测试和基准测试的对应函数名称,否则为Run的第一个参数。为避免显示和解析问题,可以使用下划线替换空格并转义不可打印的字符来对名称进行清理。传递给-run或-bench标志的正则表达式也采用相同的清除方法。
一些示例可能是为了简化自动化工具处理测试输出的过程,以避免外壳产生正则表达式参数(其中包含空格显示为多个参数)的问题。我宁愿避免使用空格而不是处理这种魔术重命名