测试 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
我无法追踪我从哪里知道的,但通常如果有人为方法 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