How to run all tests in a particular package with Maven?

后端 未结 9 1537
别跟我提以往
别跟我提以往 2021-01-30 02:18

I can find in the Maven docs where it shows how to run:

  1. A single test
  2. All tests in a single test class
  3. All tests in classes matching a particular
相关标签:
9条回答
  • 2021-01-30 02:35

    AFAIK there are no command line parameter for surefire:test to run tests in a specific package.

    I use a configuration variable to achieve the same effect. A fragment of my 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>
    

    Now if I want to run tests in a package named "com.example", I use the following command:

    mvn test -DtestGroup=com/example
    
    0 讨论(0)
  • 2021-01-30 02:37

    You could use a pattern as well, for example

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

    runs all tests in classes from package de.mypackage ending on *Test.

    [update 2017/12/18]:
    Since this became the accepted answer, here's some further information:

    • Maven uses the Maven Surefire plugin to execute tests.
    • The syntax used above (qualified package name) requires Surefire version 2.19.1 or higher! Earlier versions require the use of path expressions, for example

      mvn -Dtest="de/mypackage/*Test" test
      
    • I'm using quotes (` or ") to prevent the shell from performing pathname expansion, Maven doesn't require any quotes.

    • A single test method can be exuted using the following syntax

      mvn -Dtest=MyUnitTest#testMethod test
      
    • All tests from subpackages may be includes as well, in order to execute all tests in or beneath package de.mypackage.sub execute:

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

      or with Surefire 2.19.1 or higher

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

    There are further possibilities like using regular expressions, see the official documentation of running a single test.

    0 讨论(0)
  • 2021-01-30 02:40

    You can mention packages in your pom.xml through Surefire-plugin

    <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>
    

    Please note that JUnit version should be greater than 4.8. and version of surefire should be 2.19.1 Find more details here

    0 讨论(0)
  • 2021-01-30 02:45

    The pom.xml version of O Badr's answer:

        <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>
    
    0 讨论(0)
  • 2021-01-30 02:46

    You can take fererence from following scenarios:

    (1) Skip all test execution during maven build

    mvn package -DskipTests
    

    (2) Execute All test cases

    mvn test
    

    (3) Execute specific test group

    mvn test -DincludeGroups=TestGroup1,TestGroup2
    

    (4) Exclude specific test group during execution

    mvn test -DexcludeGroups=TestGroup3,TestGroup4
    

    (5) Execute specific package testcases

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

    (6) Execute specific test

    mvn test -Dtest=Test1,Test2
    

    I hope it will be more helpful to you with different combination of execution.

    0 讨论(0)
  • 2021-01-30 02:47
    mvn test -Dtest=com.myrootpackage.myfirstlevelpackage.*
    

    ...and if you want to include all sub packages:

    mvn test -Dtest=com.myrootpackage.myfirstlevelpackage.**.*
    
    0 讨论(0)
提交回复
热议问题