可以将文章内容翻译成中文,广告屏蔽插件可能会导致该功能失效(如失效,请关闭广告屏蔽插件后再试):
问题:
I can find in the Maven docs where it shows how to run:
- A single test
- All tests in a single test class
- All tests in classes matching a particular pattern
But how to run all the tests in a package? Is this possible?
I would prefer solutions that don't require modifying the pom.xml
or code.
回答1:
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.
回答2:
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
回答3:
mvn test -Dtest=com.myrootpackage.myfirstlevelpackage.*
...and if you want to include all sub packages:
mvn test -Dtest=com.myrootpackage.myfirstlevelpackage.**.*
回答4:
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.
回答5:
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>
回答6:
It may not be the best answer, but you could run a single TestSuite (which is a Test) which includes all the test you want in one package.
回答7:
It can also be done by
mvn clean test -Dtest="**/service/**/*.java"
eg: I am in my /home/repository and I want to run tests on /home/repository/service folder only
Here service folder is inside my current folder.
回答8:
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