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

Vic*_*usa 10 java junit naming-conventions junit4

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

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

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

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

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

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

Ben*_*ton 20

"应该"约定与行为驱动的开发风格一致.

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

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

class ANewlyCreatedAccount {
  shouldHaveAZeroBalance() {}
  shouldCalculateItsOwnInterest() {}
}
Run Code Online (Sandbox Code Playgroud)

通过命名您的类并在此规范样式中考虑它们,这可以为您提供有关要编写哪些测试的大量指导,以及您应该以何种顺序编写测试并使其成为绿色.

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

  • +1提及它是关于行为而不是测试方法 (2认同)

Rob*_*bin 5

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

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

checkNullParameter()
runSimpleQuery()
runQueryWithBadParam()
Run Code Online (Sandbox Code Playgroud)

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

  • runQueryWithBadParam() - 你不是在说这里你期望的.我个人更喜欢看到shouldThrowBadParamExceptionOnBadParam().还应该鼓励你描述你的期望...... (2认同)