【问题标题】:How to run all tests in a particular package with Maven?如何使用 Maven 运行特定包中的所有测试?
【发布时间】:2011-10-12 18:57:17
【问题描述】:

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

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

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

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

【问题讨论】:

  • 试试这个link
  • 如果您使用的是intellij,只需在项目窗口中选择包并执行“Ctrl+Shift+F10”即可。我知道这不是直接使用 maven,但我希望对那里的人有所帮助。

标签: java maven junit


【解决方案1】:

你也可以使用模式,例如

 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

【讨论】:

  • 非常适合我! mvn test -Dtest=com.example.handler.*Test
  • 你甚至可以使用mvn '-Dtest=de.mypackage.**.*Test' test 来包含子包
  • 在 Maven 3 中,当我不使用撇号 (') 时它可以正常工作
  • 当你想测试很多包时,你可以把它全部列出来(在逗号后面写就行了),例如:mvn -Dtest=com.packadmin.*Test,com.packclient.*Test test
  • 对于尝试在包中运行测试的任何其他人,您必须以 **.* 结尾。前任。 -Dtest="com.name.**.*"
【解决方案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

【讨论】:

    【解决方案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
    

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

    【讨论】:

      【解决方案4】:
      mvn test -Dtest=com.myrootpackage.myfirstlevelpackage.*
      

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

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

      【讨论】:

        【解决方案5】:

        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>
        

        【讨论】:

        • 我关于 Maven 的老问题得到了相当一致的关注......我不确定我应该对此感到高兴还是难过。
        【解决方案6】:

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

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

        【讨论】:

          【解决方案7】:

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

          【讨论】:

            【解决方案8】:

            也可以这样做

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

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

            这里的服务文件夹在我当前的文件夹中。

            【讨论】:

              【解决方案9】:

              您可以通过 Surefire-plugin 在 pom.xml 中提及软件包

              <plugin>
                          <groupId>org.apache.maven.plugins</groupId>
                          <artifactId>maven-surefire-plugin</artifactId>
                          <version>2.19.1</version>
                          <configuration>
                              <includes>
                                  <include>com.mycom.mydep.mypak.*, com.mycom.mydep.mypak2.*</include>
                              </includes>
                          </configuration>
                      </plugin>
              

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

              【讨论】:

                猜你喜欢
                • 2011-12-06
                • 2011-11-25
                • 1970-01-01
                • 2011-06-25
                • 2011-01-03
                • 2016-08-29
                • 1970-01-01
                • 1970-01-01
                相关资源
                最近更新 更多