使用Maven命令运行Junit测试套件

40

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

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

但它没有起作用。根本没有运行任何测试。请问有什么建议。


我不确定你是否可以从Surefire插件运行JUnit测试套件。 - Andrew Logvinov
仍然无法正常工作,使用方式为:mvn test -Dtest=com.org.mysuites.FastTestSuite -DfailIfNoTests=false - Java SE
2
你可以使用Surefire插件来运行,只需在其中包含<include>**/FastTestSuite.class</include>即可。这只是使用Maven命令从命令行运行的要求。 - Java SE
没有异常运行mvn clean test -Dtest=FastTestSuite,因为它没有捕捉到该测试套件,所以没有测试可以运行。 - Java SE
只是提供信息,所有测试套件都在src/test/java/目录下(不确定是否重要)。 - Java SE
2个回答

54

我通过在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,但您可以使用Maven命令运行其他测试,例如SlowTestSuite:

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

我想补充一点,maven-surefire-plugin是必需的。我在一些地方发现只有属性是不够的,它并不能正常工作。 - TheGabiRod
3
谢谢 @Java SE,你的方法在 Maven 3.3.3JUnit 4.12 中完美运作。但是 **/FastTestSuite.java 可以用来代替 **/FastTestSuite.class。这两种变体都可以很好地执行,但是指定 .java 更符合官方文档的一致性(例如,http://maven.apache.org/surefire/maven-surefire-plugin/examples/inclusion-exclusion.html)。 - flaz14
当我添加这些设置时,我的测试套件运行了,但是所有其他测试都被排除在外。如果我不添加这些设置,所有的测试都会运行,但我的测试套件会被忽略。 - David DeMar
小的补充:properties 元素应该放在你的 project 元素的根目录下(也就是直接放在 project 元素内,不要放在任何其他与 project 同级的元素内,比如 dependenciesbuild 等)。如果你已经在 project 根目录下有了一个 properties 元素,请不要再添加另一个——只需将内部行(<runSuite> ... </runSuite>)添加到现有元素中即可。 - anon

5
你错过的关键词是 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>

如果您在Stack Overflow上进行一些搜索,您可能会找到以下信息:

使用maven-failsafe-plugin在Maven中运行JUnit4测试套件 使用Maven Failsafe插件和JUnit类别

此外,您还可以定义配置文件,例如fastTest,通过在命令行添加参数来触发它:
mvn package -PfastTests

此个人资料也将包括一些包容。

正如我在问题中所说,我需要使用Maven命令运行它。按照您提到的方式可以工作。我基本上不想添加配置文件。 - Java SE
2
确实,配置文件管理是触发不同行为的方式。 - Jean-Rémy Revy

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接