使用Maven执行Junit测试

时间:2017-05-27 11:29:58

标签: java maven junit

我想在src / test / java下运行2个类:scen1.classscen2.class。这两个都有@Test注释方法。

我有另一个名为JunitDefinitions.class的课程,该课程只有@Before@After@BeforeClass@AfterClass方法(没有@Test)。 这也是在src / test / java下,但在不同的包下。

假设我有默认的pom.xml,为了能够执行所有这3个类,我应该添加什么?

2 个答案:

答案 0 :(得分:1)

  • 将测试类重命名为Scen1Test.java和Scen2Test.java,或者使用<includes>配置包含JunitFW.java,Scen1.java和Scen2.java,如documentation中所述。
  • JunitFW类仅包含@Before,因此未将其检测为测试。您必须将@Before移动到包含@Test的类或在JunitFW类中包含@Test并将其重命名为JunitFWTest以使其正常工作。

默认情况下,Surefire插件会自动包含具有以下通配符模式的所有测试类:

"**/Test*.java" - includes all of its subdirectories and all Java filenames that start with "Test".
"**/*Test.java" - includes all of its subdirectories and all Java filenames that end with "Test".
"**/*Tests.java" - includes all of its subdirectories and all Java filenames that end with "Tests".
"**/*TestCase.java" - includes all of its subdirectories and all Java filenames that end with "TestCase".

答案 1 :(得分:1)

除了像@viniciusartur所建议的那样将类重命名为Scen1Test.java和Scen2Test.java之外,它将帮助Maven识别测试类以使用surefire-plugin执行它们。

此处需要注意的另一点是,@Before@BeforeClass@After等未经@Test method独立执行的原因仅在于

  

Test annotation告诉JUnit公共void方法到哪个   它附加可以作为测试用例运行。要运行该方法,请使用JUnit   首先构造一个新的类,然后调用   注释方法。

来自documentation of @Before in JUnit

  

使用@Before注释公共void方法会导致该方法   在Test方法之前运行。 @Before超类方法将会   在当前班级之前运行。

如此推断,在处理注释时,如果/src/test/java下的类中没有@Test注释(相对于基于maven的问题),则没有其他注释有意义进行处理。

请注意,如果您使用由@Test method组成的另一个SubClassTest.java扩展此类,则会执行所有这些方法。因为它们是根据(@Test)要处理的内容进行处理的。