【问题标题】:Execute Junit tests using Maven使用 Maven 执行 Junit 测试
【发布时间】:2017-05-28 05:40:50
【问题描述】:

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

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

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

【问题讨论】:

  • mvn install 不执行它们吗?您到底在寻找什么?
  • 您应该在 pom 文件中将 junit 作为与 scopetest 的依赖项,通常这应该由以下人员简单地运行:mvn clean test
  • AFAIK 测试类必须遵循模式*Test.java。因此,将您的类重命名为 Scen1TestScen2Test。相关:How do I get my Maven Integration tests to run.
  • 我在那里有junit依赖,我应该在哪里添加范围测试?目前 mvn clean test 不运行测试
  • 请显示您的项目的完整大纲和您的 pom 文件...或将该示例项目放在 github 上以便我们查看...

标签: java maven junit


【解决方案1】:
  • 使用<includes> 配置将您的测试类重命名为 Scen1Test.java 和 Scen2Test.java 或包括 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".

【讨论】:

  • 感谢 Viniciusartur,但 Maven 仍然不执行 JunitFWTest.java...它只有一个 Before 注释而不是 Test 注释...
  • 我测试过,你是对的。我更新了答案:JunitFW 类只包含一个@Before,所以它没有被检测为测试。您必须将 @Before 移动到包含 @Test 的类或在 JunitFW 类中包含 @Test 并将其重命名为 JunitFWTest 以使其工作。
【解决方案2】:

除了按照@viniciusartur 的建议将类重命名为 Scen1Test.java 和 Scen2Test.java 之类的东西,这将有助于 Maven 识别测试类以使用surefire-plugin 执行它们。

这里要注意的另一点是@Before@BeforeClass@After等在没有@Test method的情况下无法独立执行的原因是只有

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

来自documentation of @Before in JUnit

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

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

请注意,如果您使用包含@Test method 的另一个SubClassTest.java 扩展该类,那么所有这些方法都将被执行。因为它们是根据要执行的操作 (@Test) 来处理的。

【讨论】:

    猜你喜欢
    • 2014-05-28
    • 2013-08-23
    • 2012-12-04
    • 1970-01-01
    • 2013-08-16
    • 2020-07-25
    • 2011-07-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多