命名约定JUnit后缀或前缀Test

aro*_*ron 51 java junit unit-testing naming-conventions

正在测试的类MyClass.java JUnit测试用例名称替代方案:

TestMyClass.java
MyClassTest.java
Run Code Online (Sandbox Code Playgroud)

http://moreunit.sourceforge.net似乎使用"测试"作为前缀默认,但我已经看到两种用途.当在Eclipse中将整个项目作为单元测试运行时,两者似乎都被识别,因为它是为@Test解析的类中的注释.我猜maven做同样的事情.

哪个更受欢迎?

And*_*s_D 87

后缀的另一个论点 - 至少在英语中:

一个类通常代表一个名词,它是一个概念的模型.您的一个测试的实例将是"MyClass测试".相反,一种方法会模拟某种动作,比如'test [the] calculate [method]'.

因此,我总是使用'​​suffix'作为测试类和测试方法的前缀:

the MyClass test          --> MyClassTest
test the calculate method --> testCalculate()
Run Code Online (Sandbox Code Playgroud)


Jon*_*eet 52

我更喜欢使用后缀 - 这意味着向下查看目录中的文件列表更简单:您不必在心理上忽略前四个字母以获得有意义的内容.(我假设您已经在与生产代码不同的目录中进行了测试.)

这也意味着当你在Eclipse中使用Open Type(Ctrl-T)时,你最终会同时看到生产代码和它的测试......如果你没有看到测试类,这也是一个提醒: )


kro*_*ock 9

在JUnit 4之前,通常将测试类命名为SomethingTest,然后在所有匹配的类中运行JUnit *Test.java.这些天注释驱动JUnit 4,你只需要注释你的测试方法@Test并完成它.您的测试类可能与您的实际源(src/测试类中的源)处于不同的目录结构下,test/因此这些天前缀/后缀基本上无关紧要.

  • 他们不是.假设我们有一个连接器模型,这个类名为`Connector`,而测试连接器实例的测试模型将是`ConnectorTest`.对我来说这很明显.从纯粹的技术角度来看,你是对的,但命名应该与设计有关. (11认同)
  • 启蒙了解历史。+1 (2认同)

Mor*_*cus 6

不冒犯任何人,但是我认为可以公平地说,“ moreunit”比JUnit少为人所共知,后者几乎无处不在,并建立了后缀测试类“ Test”的约定。

尽管JUnit4消除了同时遵循类和方法命名约定(分别是“ postfix Test”和“ prefix test”)的必要性,但我认为两者仍然对保持清晰有用。

想象一下让src / main / java /.../ MyClass.myMethod()测试src / test / java /.../ MyClass.myMethod()的恐怖。

有时,偏离JUnit3约定很有用-我发现在设置方法之后命名设置方法(“ createTestFactory()”),并在其命名为“ @Before”时,比通用的“ setUp()”要清晰得多。

当需要执行几个不相关的设置操作时,这特别有用-它们可以处于单独的方法中,每个方法都标记为@Before。这很好地传达了动作的独立性。

  • BDD(http://blog.dannorth.net/introducing-bdd)的一个好主意:与其将测试方法命名为“ @Test testFailOnNull(){...}”,不如使用动词“应该”:“ @ Test shouldFailOnNull (){...}”。我发现这简明扼要地传达了很多信息。它避免了重复“测试”,并且比“ @Test failOnNull(){...}”读起来更好。 (2认同)

Pab*_*mer 5

我更喜欢使用 TestClassName 语法。当使用其他语法时,当我打开两个语法时,我很难确定哪个是测试,哪个是编辑器中的实际类。必须查找名称中的最后四个字母非常烦人,而且这些字母并不总是显示。

\n\n

对我来说,其他语法会导致每天在文件之间进行几次错误的交换\xc2\xb4s,这非常耗时。

\n