我无法追踪我所知道的位置,但通常如果为方法Foo
编写测试,则相应的测试名为TestFoo
。
如果测试一个未导出的函数,比如foo
,那么测试的名称应该是什么?
我的问题来自于JetBrains IDE for Go,当被要求为未导出的函数生成测试时,生成像Test_foo
这样的东西。
这种行为可能有意义,因为如果你在同一个包中有Foo
并且它是未导出的counterpat foo
,你会想要以某种方式对它们进行不同的测试(至少在IDE中跳转到测试功能)。
那么在未导出的函数之后是否有关于命名测试的约定?
顺便说一下:Go testing软件包的文档说,如果是,则执行测试:
表格的任何功能
func TestXxx(*testing.T)
其中Xxx可以是任何字母数字字符串(但第一个字母不能在[a-z]中)并用于标识测试例程。
这意味着,任何名称中都有下划线的测试都不应该由go test
执行。但是,我们都知道,这样的测试工作得很好。
我最初的混淆源于两件事:
1)假设,测试函数名称中允许使用下划线。这个假设得到了大量开源项目的支持
2)事实上,JetBrains Idea使用包含下划线的名称生成测试
对我自己的问题的回应:有一个公约(我宁愿说,这是谷歌的指南),很多项目都违反了。不应在测试名称中使用下划线。
我投票支持关闭我自己的问题并在JetBrains bugtracker中创建了一个错误报告。 https://youtrack.jetbrains.com/issue/GO-5185