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

时间:2011-07-25 17:18:38

标签: java maven junit

我可以在显示如何运行的Maven docs中找到:

  1. 单次测试
  2. 单个测试类中的所有测试
  3. 匹配特定模式的类中的所有测试
  4. 但是如何在包中运行所有测试?这可能吗?

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

9 个答案:

答案 0 :(得分:128)

您也可以使用模式,例如

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

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

[更新2017/12/18]:
由于这成为公认的答案,这里有一些进一步的信息:

  • Maven使用Maven Surefire plugin执行测试。
  • 上面使用的语法(限定包名称)需要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
    

还有其他可能性,例如使用正则表达式,请参阅official documentation of running a single test

答案 1 :(得分:20)

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

答案 2 :(得分:7)

mvn test -Dtest=com.myrootpackage.myfirstlevelpackage.*

...如果你想包括所有子包:

mvn test -Dtest=com.myrootpackage.myfirstlevelpackage.**.*

答案 3 :(得分:3)

O Badr答案的pom.xml版本:

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-surefire-plugin</artifactId>
                <version>2.20.1</version>
                <configuration>
                    <includes>
                 <!-- includes all tests, but not in subpackages -->
                        <include>**/package1/*</include>   
                 <!-- includes all tests, AND in subpackages -->
                        <include>**/package2/**</include>
                    </includes>
                </configuration>
            </plugin>

        </plugins>
    </build>

答案 4 :(得分:3)

您可以从以下场景中获取信息:

(1)在maven build

期间跳过所有测试执行
mvn package -DskipTests

(2)执行所有测试用例

mvn test

(3)执行特定测试组

mvn test -DincludeGroups=TestGroup1,TestGroup2

(4)在执行期间排除特定测试组

mvn test -DexcludeGroups=TestGroup3,TestGroup4

(5)执行特定的包测试用例

mvn test -Dtest="test.java.com.service.map.**"

(6)执行特定测试

mvn test -Dtest=Test1,Test2

我希望通过不同的执行组合对您更有帮助。

答案 5 :(得分:2)

遇到相同的问题(如何在特定程序包中运行所有测试)并尝试了许多方法,两个有效的命令是:

mvn -Dtest=com.package.my.package.** test

mvn -Dtest=com.package.my.package.**.* test

答案 6 :(得分:1)

这可能不是最好的答案,但你可以运行一个TestSuite(这是一个测试),它包含你想要在一个包中的所有测试。

答案 7 :(得分:0)

也可以通过

完成
mvn clean test -Dtest="**/service/**/*.java"

例如:我在/ home / repository中,我只想在/ home / repository / service文件夹上运行测试

此处服务文件夹位于我当前的文件夹中。

答案 8 :(得分:0)

您可以通过Surefire-plugin

在pom.xml中提及包
[["Test Value","08/30/2017 16:33:35","625"],["Test Value","08/30/2017 16:22:38","240"]]
[["Test Value 2","08/30/2017 16:07:38","432"],["Test Value 2","08/30/2017 15:59:07","1355"]]

请注意,JUnit版本应大于4.8。和版本的surefire应该是2.19.1 Find more details here