使用 Maven 命令运行 Junit Suite

Posted

技术标签:

【中文标题】使用 Maven 命令运行 Junit Suite【英文标题】:Run Junit Suite using Maven Command 【发布时间】:2012-07-30 13:24:53 【问题描述】:

我有多个 Junit 测试套件(SlowTestSuite、FastTestSuite 等)。我想使用 maven 命令只运行特定的套件。例如

mvn clean install test -Dtest=FastTestSuite -DfailIfNoTests=false

但它不起作用。只是根本没有运行任何测试。请有任何建议。

【问题讨论】:

我不确定你是否可以从surefire插件运行JUnit测试套件。 仍然不能用作:mvn test -Dtest=com.org.mysuites.FastTestSuite -DfailIfNoTests=false 您可以使用运行正常的surefire插件运行,如果您包含它,例如<include>**/FastTestSuite.class</include>。它只是使用 maven 命令从命令行运行它的要求。 没有运行mvn clean test -Dtest=FastTestSuite 的异常,因为它没有拾取该套件,因此没有运行测试。 仅供参考,所有套件都在 src/test/java/ 下(不确定是否重要)。 【参考方案1】:

我通过将属性添加到 pom 中实现了这一点:

<properties>
    <runSuite>**/FastTestSuite.class</runSuite>
</properties>

maven-surefire-plugin 应该是:

        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-surefire-plugin</artifactId>
            <configuration>
                <includes>
                    <include>$runSuite</include>
                </includes>
            </configuration>
        </plugin>

所以这意味着默认情况下它将运行 FastTestSuite 但您可以运行其他测试,例如SlowTestSuite 使用 maven 命令为:

mvn install -DrunSuite=**/SlowTestSuite.class -DfailIfNoTests=false

【讨论】:

我想补充一点,maven-surefure-plugin 是必需的,我在某些地方发现只有使用该属性才能工作,但事实并非如此。 感谢 @Java SE,您的方法与 Maven 3.3.3JUnit 4.12 完美配合。但是可以使用**/FastTestSuite.java 代替**/FastTestSuite.class。两种变体都表现良好,但指定 .java 看起来更符合官方文档(例如,maven.apache.org/surefire/maven-surefire-plugin/examples/…)。 当我添加这些设置时,我的测试套件运行,但所有其他测试都被排除在外。如果我不添加设置,所有测试都会运行,但我的测试套件会被忽略。 次要附录 -- properties 元素位于 project 元素的根部(即直接在其中,而不在 project 内的任何东西内,dependencies 的兄弟姐妹和build 等等)。如果您的 project 根中已经有一个 properties 元素,不要添加另一个 -- 相反,只需将内行 (&lt;runSuite&gt; ... &lt;/runSuite&gt;) 添加到现有元素。【参考方案2】:

您错过的关键字是 maven-surefire-plugin :http://maven.apache.org/plugins/maven-surefire-plugin/。

用法是:

<project>
  [...]
  <build>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-surefire-plugin</artifactId>
        <version>2.12.1</version>
        <configuration>
          <includes>
            <include>**/com.your.packaged.Sample.java</include>
          </includes>
        </configuration>
      </plugin>
    </plugins>
  </build>
  [...]
</project>

如果你稍微搜索一下堆栈溢出,你可能会找到信息:

Running a JUnit4 Test Suite in Maven using maven-failsafe-plugin Using JUnit Categories with Maven Failsafe plugin

另外,您可以定义配置文件,例如fastTest,将通过在命令行中添加参数来触发:

mvn package -PfastTests

此个人资料也会包含一些内容。

【讨论】:

正如我在问题中所说,我需要使用 maven 命令运行它。它正在按照您提到的方式工作。我基本上不想添加个人资料。 确实,配置文件管理是触发不同行为的方式。

以上是关于使用 Maven 命令运行 Junit Suite的主要内容,如果未能解决你的问题,请参考以下文章

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

全网最全:Junit5的@Suite注解-上

Maven 和 JUnit 5:在一个类中运行单个测试

运行测试套件无法通过 maven 在 junit5 中运行

maven-surefire 插件没有运行少数 Junit5 测试配置文件

Junit4 Suite.SuiteClasses升级 junit5