如何使用 Maven 在特定包中运行所有测试?

2022-08-31 10:48:24

我可以在Maven文档中找到它显示如何运行的地方:

  1. 单个测试
  2. 单个测试类中的所有测试
  3. 类中与特定模式匹配的所有测试

但是如何在包中运行所有测试?这可能吗?

我更喜欢不需要修改或代码的解决方案。pom.xml


答案 1

您也可以使用模式,例如

 mvn '-Dtest=de.mypackage.*Test' test

在 以 结尾的包 de.mypackage 类中运行所有测试。*Test

[2017/12/18 更新]:
由于这成为公认的答案,因此以下是一些进一步的信息:

  • Maven使用Maven Surefire插件来执行测试。
  • 上面使用的语法(限定的包名称)需要 Surefire 版本或更高版本!早期版本需要使用路径表达式,例如2.19.1

    mvn -Dtest="de/mypackage/*Test" test
    
  • 我使用引号('或“)来防止shell执行路径名扩展,Maven不需要任何引号。

  • 可以使用以下语法来解释单个测试方法

    mvn -Dtest=MyUnitTest#testMethod test
    
  • 来自子包的所有测试也可以包含,以便执行包中或包下的所有测试,执行:de.mypackage.sub

    mvn -Dtest="de/mypackage/sub/**" test
    

    或使用 Surefire 或更高版本2.19.1

    mvn -Dtest="de.mypackage.sub.**" test
    

还有更多的可能性,例如使用正则表达式,请参阅运行单个测试的官方文档


答案 2

AFAIK 没有命令行参数,用于 surefire:test 在特定包中运行测试。

我使用配置变量来实现相同的效果。我的pom的片段.xml:

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-surefire-plugin</artifactId>
            <version>2.7.2</version>
            <configuration>
                <includes>
                    <include>**/${testGroup}/*Test.java</include>
                </includes>
            </configuration>
        </plugin>
    </plugins>
</build>

现在,如果我想在名为“com.example”的包中运行测试,我使用以下命令:

mvn test -DtestGroup=com/example

推荐