带有@Suite注释的 Junit5 测试套件不使用 mvn 测试命令执行测试



我们打算将基于JUnit4的项目升级到JUnit5。我根据JUnit5官方网站上的说明修改了JUnit4套件:https://junit.org/junit5/docs/current/user-guide/#running-测试junit平台运行程序测试套件。在命令行mvn test -Dtest=SuiteXXTest中使用mvn测试时未执行测试,在JUnit4和JUnit5套件中都未执行测试。错误消息:[ERROR] Failed to execute goal org.apache.maven.plugins:maven-surefire-plugin:3.0.0-M5:test (default-test) on project XXX: No tests were executed!然而,JUnit4和JUnit5套件都可以运行和执行IDEA中包含的测试。Maven surefire插件版本为3.0.0-M5。单个测试类(ATest和BTest(基于JUnit4编程模型。

旧的JUnit4套件是这样的:

import org.junit.runner.RunWith;
import org.junit.runners.Suite;
import test.XX.*;
@RunWith(Suite.class)
@Suite.SuiteClasses({
ATest.class,
BTest.class
})
public class SuiteXXTest {
}

修改为:

import org.junit.platform.suite.api.SelectClasses;
import org.junit.platform.suite.api.Suite;
import test.XX.*;
@Suite
@SelectClasses({
ATest.class,
BTest.class
})
public class SuiteXXTest {
}

相关依赖项:

<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter</artifactId>
<version>5.8.2</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.junit.vintage</groupId>
<artifactId>junit-vintage-engine</artifactId>
<version>5.8.2</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.junit.platform</groupId>
<artifactId>junit-platform-suite</artifactId>
<version>1.8.2</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency>

奇怪的是,如果我使用deprecated@RunWith(JUnitPlatform.class(注释,测试套件可以正常执行。但根据JUnit5官方用户指南,使用这个runner意味着测试将在JUnit4环境中执行,我不明白什么条件被视为JUnit4的环境(JUnit5依赖项已经在pom中配置(。

我不知道是错误还是我的错误使用。

RunWith是JUnit4构造,不能与JUnit5一起使用。请使用JUnit平台套件,如中所述https://junit.org/junit5/docs/current/user-guide/#junit-平台套件引擎

在此处找到解决方案:https://github.com/junit-team/junit5/discussions/2753.

根据这个答案,我刚刚将命令从-Dtest=SuiteXXTest更改为-Dinclude=SuiteXXTest,它运行良好。我认为这与surefire插件有关。当使用-Dtest命令时,似乎surefire无法拾取用@Suite注释的测试表单套件。

奇怪的是,我也遇到了同样的问题,当从surefire 3.1.2改回2.22.2时,它起了作用,即将所有测试添加回测试报告,并且不生成单独的测试。

最新更新