当前位置: 首页 > 知识库问答 >
问题:

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

颛孙天宇
2023-03-14

我们打算将基于JUnit4的项目升级到JUnit5。我按照JUnit5官方网站的说明修改了JUnit4套件:https://JUnit . org/JUnit 5/docs/current/user-guide/# running-tests-JUnit-platform-runner-test-suite。在命令行中使用mvn test时没有执行测试:< code > mvn test-Dtest = suite xtex test ,JUnit4和JUnit5套件中都没有执行测试。错误消息:< code>[ERROR]未能执行goal org . Apache . maven . plugins:maven-surefire-plugin:3 . 0 . 0-M5:项目XXX上的test (default-test):未执行任何测试!然而JUnit4和JUnit5套件都可以运行和执行IDEA中包含的测试。Maven surefire插件版本为< code>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>

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

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

共有2个答案

邓翼
2023-03-14

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

根据这个答案,我只是将我的命令从-Dtest=SuiteXXTest更改为-Dinclude=SuiteXXTest,它工作正常。我认为这与surefire插件有关。使用 -Dtest 命令时,似乎肯定无法从带有 @Suite 注释的套件中获取测试。

施慈
2023-03-14

<code>RunWith</code>是一个JUnit 4构造,不适用于JUnit 5。请改用JUnit平台套件,如中所述https://junit.org/junit5/docs/current/user-guide/#junit-平台套件引擎

 类似资料:
  • 基于此链接中的答案,创建了一个包含测试类的测试套件 返回错误 但是每个添加的测试类都有测试方法,并且单独运行

  • Test suite用于捆绑一些单元测试用例并将它们一起运行。 在JUnit中, @RunWith和@Suite注释都用于运行套件测试。 本章以两个测试类TestJunit1和TestJunit2 ,它们使用Test Suite一起运行。 创建一个类 (Create a Class) 在C:\“JUNIT_WORKSPACE中创建一个要测试的java类,比如MessageUtil.java 。 /

  • test suite是一组测试用例,用于测试软件程序的行为或一组行为。 在TestNG中,我们无法在测试源代码中定义套件,但它由一个XML文件表示,因为套件是执行的特征。 它还允许灵活配置要运行的tests 。 套件可以包含一个或多个测试,并由“suite”标签定义。 是testng.xml的根标记。 它描述了一个测试套件,该套件又由几个部分组成。 下表列出了接受的所有合法属性。 Sr.No. 属

  • 有4个类包含测试< code>TestClass1、TestClasss2、TestClass3、TestClass4。您需要创建2个测试套件,每个套件将包含2个类,并使用< code>Maven surefire插件并行运行它们。 我创建了两个包含以下内容的xml文件: 和 也添加到: 接下来,我用命令< code>mvn clean test运行项目,项目将要运行,但是测试没有开始。我哪里错了

  • 我创建了一个测试运行程序,它创建了一个动态的testng xml,这样我就可以运行带有参数的测试。所有@Test方法都在相关类中(例如LoginTest.class)。它在IDE上运行得非常完美,但在Maven(mvn测试)下,它只打印构建成功,而不运行任何测试… POM. xml中的maven-surefire插件: 我的TestRunner课程: 我的LoginTest类:

  • 我有一个用selenium进行单元测试和集成测试的项目。 当我用IntelliJ执行cucumber集成测试时,它工作得很好,您可以看到: 用Intellij执行cucumber集成测试 但是,当我执行mvn集成测试时,似乎没有发现任何联调: 故障保护输出 我定义了以下POM: > 文件夹结构是文件夹结构 mvn集成-测试输出https://drive . Google . com/file/d/