单位测试方法的前缀:“测试”与“应该”

时间:2010-12-20 17:03:09

标签: java junit naming-conventions junit4

通常的做法是在JUnit中使用“test”作为测试方法名称的前缀。但在过去几年中,有些人将其改为前缀“应该”。

如果我想在数据库中测试客户创建,我通常会将方法命名为“testCustomerCreation”。但是,有些人会将其命名为“shouldCreateCustomer”。

当我是项目中唯一的人或项目中的其他人都同意我时,这是很多个人品味。但是当不是这种情况时,会出现一些分歧或不一致的混合物。

我在某处写了一篇名为“testShouldCreateCustomer”的方法的文章,因此他决定放弃“test”前缀。但事实上他并没有在“测试”前缀,他正在使用“testShould”并改为“应该”。显然,这并不能说服我。

我个人非常倾向于坚持使用“test”前缀,因为方法名称通常以不定式形式的动词开头(“get”,“set”,“add”,“remove”,“clear”,“send” “,”接收“,”打开“,”关闭“,”读取“,”写“,”创建“,”列表“,”弹出“,”打印“等,所以是”测试“)。因此,在方法名称前加上“should”会让我听起来真的很奇怪,看起来不对。

那么,使用“应该”而不是“测试”的真正好理由是什么?有哪些优点和缺点?

5 个答案:

答案 0 :(得分:20)

“应该”约定与behaviour driven development测试方式一致。

我个人更喜欢以这种方式编写测试,因为它鼓励您编写读作规范的测试,并且更符合班级的行为或您正在测试的系统。

在可能的情况下,我有时会更进一步,使用它的名称为测试类提供更多上下文:

class ANewlyCreatedAccount {
  shouldHaveAZeroBalance() {}
  shouldCalculateItsOwnInterest() {}
}

通过命名您的类并以此规范样式考虑它们,这可以为您提供大量指导要编写哪些测试,以及按哪种顺序写测试并使它们变绿。

是的,'should'vs'test'只是一个前缀,保持一致很重要,但这个问题也与你如何测试代码和选择要编写的测试的风格和思维方式有关。 BDD有很多价值,所以我建议进一步阅读并尝试一下。

答案 1 :(得分:5)

我想说'test'前缀只是需要时预注释日的保留。我建议你只为你的测试用例使用有意义的名字(这可能意味着有或没有'测试')。

我更喜欢命名测试方法,以便明确测试的内容。即。

checkNullParameter()
runSimpleQuery()
runQueryWithBadParam()

无论如何,所有测试用例都位于测试目录中,并且所有实际测试都被注释,因此'test'前缀相当多余。

答案 2 :(得分:3)

一致性比命名问题更正确。如果对项目有任何疑问,负责该项目的技术成员应正式概述编码实践,以便这样的问题不会浪费宝贵的项目时间。

答案 3 :(得分:3)

在原始的JUnit中,测试方法必须开始test。许多其他语言的框架都复制了这个约定。即使在JUnit中不再是这种情况,即使其他框架可能不同,我认为大多数程序员仍然非常熟悉例如testX作为单元测试,所以我认为坚持test约定是有好处的。

答案 4 :(得分:2)

我更喜欢test后缀。您的项目中可能有一个前缀为should的方法,例如: shouldBuy然后您的测试会被称为testShouldBuy因为shouldShouldBuy看起来很奇怪。

我还使用MoreUnit Eclipse插件,当我按下test时,会自动创建一个前缀为Ctrl+U的测试方法,或者当我按Ctrl+J时跳转到测试方法。 (尽管您可以配置它使用的前缀。)如果您与命名不一致,则诸如MoreUnit之类的自动化工具将无法帮助您进行测试。