测试 Go 中未导出函数的命名约定

Tests naming convention for unexported functions in Go

我无法追踪我从哪里知道的,但通常如果有人为方法 Foo 编写测试,则相应的测试被命名为 TestFoo.

如果测试一个未导出的函数,比如 foo,那么测试的名称应该是什么?

我的问题来自这样一个事实,即 JetBrains IDE for Go,当被要求为未导出的函数生成测试时,会生成类似 Test_foo.

的内容

这种行为可能有道理,因为如果你有 Foo 并且它在同一个包中是未导出的对应 foo,你会想以某种方式对它们进行不同的测试(至少 跳转到 IDE 中的测试 功能。

那么在未导出的函数之后命名测试有什么约定吗?

顺便说一句: Go testing 包的文档说,如果是

则执行测试

any function of the form

func TestXxx(*testing.T)

where Xxx can be any alphanumeric string (but the first letter must not be in [a-z]) and serves to identify the test routine.

这意味着,go test 不应执行名称中包含下划线的任何测试。然而,我们都知道,这样的测试工作得很好。

我最初对此的困惑源于两件事:

1) 一个假设,测试函数名称中允许使用下划线。这个假设得到了大量这样做的主要开源项目的支持

2) 事实上,JetBrains Idea 生成名称包含下划线的测试

对我自己的问题的回应:有一个约定(我宁愿说,这是 Google 的指导方针),许多项目都违反了这个约定。测试名称中不应使用下划线。

我投票赞成关闭我自己的问题并在 JetBrains bugtracker 中创建了一个错误报告。 https://youtrack.jetbrains.com/issue/GO-5185