命名约定JUnit后缀或前缀Test

时间:2010-06-30 06:04:42

标签: java unit-testing junit naming-conventions

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

TestMyClass.java
MyClassTest.java

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

哪个更受欢迎?

9 个答案:

答案 0 :(得分:81)

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

一个类通常代表一个名词,它是一个概念的模型。您的一个测试的实例将是“MyClass测试”。相比之下,一种方法会对某种行为进行建模,例如'test [the] calculate [method]'。

因此,我总是使用测试类的'后缀'和测试方法的前缀:

the MyClass test          --> MyClassTest
test the calculate method --> testCalculate()

答案 1 :(得分:51)

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

这也意味着当您在Eclipse中使用Open Type(Ctrl-T)时,您最终会同时看到生产代码及其测试...如果您 don',这也是一个提示t 查看测试类:)

答案 2 :(得分:7)

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

答案 3 :(得分:5)

不要冒犯任何人,但我认为可以说“moreunit”比JUnit更为人所知,JUnit几乎无处不在,并建立了后缀测试类“Test”的惯例。

尽管JUnit4不再需要遵循类和方法命名约定(分别为“postfix Test”和“prefix test”),但我认为两者对于清晰度仍然有用。

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

有时,偏离JUnit3约定是有用的 - 我发现命名设置方法(“createTestFactory()”)和注释它们“@Before”比通用的“setUp()”更清晰

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

答案 4 :(得分:4)

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

对我而言,其他语法导致每天在文件之间进行多次错误的交换,这非常耗时。

答案 5 :(得分:2)

如果您独自工作,我认为您对测试感到满意是很重要的。但如果你在一个小组中,你最好坐下来解决问题。我个人倾向于使用后缀作为类和前缀的方法,并尝试让我的组适应这种约定。

答案 6 :(得分:1)

当我想将测试分成多个类时,我也使用MyClassTest_XXX。这在测试大类时非常有用,我希望逻辑上对测试进行分组。 (无法控制遗留代码,所以这个场景确实出现了。)然后我有类似KitchenSinkTest_ForArray,KitchSinkTest_ForCollection等的东西。

答案 7 :(得分:0)

我建议MyClassTests

类应该是名词短语,因此常用的MyClassTest和不太常见的MyClassTestsMyClassTestCaseMyClassTestFixture都可以。从技术上讲,JUnit测试类的实例代表test fixture,但TestFixture对我来说有点过于冗长。

我认为MyClassTests以最佳方式传达意图,因为类中通常有多个测试方法,每个测试方法代表一个测试(测试用例)。

答案 8 :(得分:-2)

我更喜欢后缀:测试用例。这符合:http://xunitpatterns.com/Testcase%20Class.html