Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/327.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 以单位表示的测试方法前缀:“;测试“;vs";应该";_Java_Junit_Naming Conventions_Junit4 - Fatal编程技术网

Java 以单位表示的测试方法前缀:“;测试“;vs";应该";

Java 以单位表示的测试方法前缀:“;测试“;vs";应该";,java,junit,naming-conventions,junit4,Java,Junit,Naming Conventions,Junit4,通常的做法是在JUnit中的测试方法名称前面加上“test”。但在过去几年中,一些人将其改为前缀“应该” 如果我想在数据库中测试客户创建,我通常会将方法命名为“testCustomerCreation”。然而,有些人会将其命名为“shouldCreateCustomer” 当我是项目中唯一的一个人或者项目中的其他人都同意我的观点时,这是一个很大的个人品味。但当情况并非如此时,一些分歧或不一致的混合开始出现 我在某个地方读到一篇文章,其中一个人将他的方法命名为“testShouldCreateCu

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

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

当我是项目中唯一的一个人或者项目中的其他人都同意我的观点时,这是一个很大的个人品味。但当情况并非如此时,一些分歧或不一致的混合开始出现

我在某个地方读到一篇文章,其中一个人将他的方法命名为“testShouldCreateCustomer”,出于这个原因,他决定去掉“test”前缀。但事实上,他并没有用“test”作为前缀,而是用了“testShould”并改为“should”。显然,这并没有说服我

我个人强烈倾向于使用“test”前缀,因为方法名称通常以不定式动词开头(“get”、“set”、“add”、“remove”、“clear”、“send”、“receive”、“open”、“close”、“read”、“write”、“create”、“list”、“pop”、“print”等,“test”也是如此)。所以,在方法名前加上“应该”听起来真的很奇怪,看起来是错误的


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

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

在最初的JUnit中,测试方法必须开始
测试。许多其他语言的框架都复制了这一惯例。尽管JUnit中不再是这种情况,尽管其他框架可能有所不同,但我认为大多数程序员仍然非常熟悉名为testX的方法作为单元测试,因此,出于这个原因,我认为坚持
测试
惯例是很好的。

应该”惯例与测试风格保持一致

我个人确实更喜欢用这种风格编写测试,因为它鼓励您编写读作规范的测试,并且更符合您正在测试的类或系统的行为

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

class ANewlyCreatedAccount {
  shouldHaveAZeroBalance() {}
  shouldCalculateItsOwnInterest() {}
}
通过以这种规范风格命名类并考虑它们,这可以为您提供很多关于编写哪些测试的指导,以及编写测试并使其变为绿色的顺序


是的,'should'vs'test'只是一个前缀,保持一致性很重要,但这个问题还涉及如何测试代码和选择编写哪些测试的风格和心态。BDD有很多价值,所以我建议进一步阅读并尝试一下

我要说的是,“test”前缀仅仅是注释前的一种保留,当时需要这样做。我建议您为您的测试用例使用有意义的名称(这可能意味着使用或不使用“test”)

我更喜欢命名测试方法,以便清楚地知道测试的内容。i、 e

checkNullParameter()
runSimpleQuery()
runQueryWithBadParam()

无论如何,所有测试用例都位于测试目录中,并且所有实际测试都有注释,因此“test”前缀是多余的。

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


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

我会花更少的时间担心愚蠢的前缀,而花更多的时间担心测试名的其余部分是描述性的。runQueryWithBadParam()-不过你说的并不是你期望的。我个人更喜欢看到shouldThrowBapparamExceptionOnOnNbapparam()。还应鼓励您描述您的期望……注释(expected=BadParameterException)对于简单的情况应该足够清晰。在其他情况下,我让代码显示我所期望的,因为可能会有几个关于多个坏参数的断言。例如,null或超出范围的值可能都包含在同一个testcase中(bad param)。断言本身告诉了我的期望,阅读代码的人都应该清楚。@Benjamin:testQueryWithBadParam()呢@罗宾:我部分同意。有时“检查”或“验证”比“测试”好,但“runSimpleQuery”并不完全是您要做的。您并不是简单地运行它,而是运行并断言它运行正确,就像“testSimpleQueryRun”。同样,我们会有“testQueryWithBadParam”。我知道,通过这种方式,很可能每个方法都有前缀test,但它不仅仅是一个前缀,它将是该方法功能描述的一部分。@Victor-我认为@test testThisThing()是多余的。注释已经确定了用于执行测试的方法。我不认为在每个已经被注释为测试的方法上都有相同的前缀是非常有用的,不管这个前缀是“test”,“should”。。。或者其他任何事情。+1提到这是关于行为而不是测试方法的,你说服了我。但是,这意味着,所有简单地命名测试方法的人,甚至看起来都不像是s