Google Test的文件说:
TEST()
争论从一般到具体.第一个参数是测试用例的名称,第二个参数是测试用例中的测试名称.两个名称都必须是有效的C++标识符,并且它们不应包含下划线(_
).
这让我感到惊讶,因为我通常用下划线(而不是CamelCase)命名测试,例如:
TEST(foo_test, should_fail_if_either_arg_negative) {
似乎测试表现良好.
我的问题是,这个无下划线的规则有多严格?如果我打破它会发生什么?
从一个Vlad Losev(参见本讨论)中,当他真正在Google上使用测试产品时:
实施此限制是为了让我们在实施测试时具有一定的灵活性.有一天,我们可能决定改变实施并依赖这一假设.[然后]不符合它的用户代码可能最终破坏.因此,请尝试保持您的测试用例名称没有下划线.
所以,即使你把标准的语言方法,即规则以表示must
和shall
而准则的指示should
,你会建议遵循的准则说只是为了更加肯定您的代码将无法在未来打破.
稍后在该讨论中,还明确表示带有下划线的某些参数可能导致名称以下划线开头或包含两个或更多连续下划线,这两个下划线在技术上都是用户代码中的"无效"(它们保留用于实现).
Google Test在其常见问题解答中回答了此问题.简而言之,
测试名称的开头或结尾_
很容易生成无效的标识符.
_
在大多数情况下,中间的测试名称都很好.然而,
TEST(Time, Flies_Like_An_Arrow) { ... } TEST(Time_Flies, Like_An_Arrow) { ... }
将生成相同的名称.
为简单起见,该规则设置得比必要时更具约束力,并且它还为Google Test提供了一些空间,以防将来实施需要更改.
所以,最后:
如果您违反规则,可能不会立即产生后果,但您的测试可能(可能)会破坏新的编译器(或您正在使用的新版本的编译器)或新版本的Google Test.因此,最好遵循规则.