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

jm2pwxwz  于 2023-10-17  发布在  Maven
关注(0)|答案(9)|浏览(130)

我可以在Maven docs中找到它显示如何运行的地方:
1.单个测试
1.单个测试类中的所有测试
1.类中匹配特定模式的所有测试
但是如何在一个包中运行所有的测试呢?这可能吗?
我更喜欢不需要修改pom.xml或代码的解决方案。

zzwlnbp8

zzwlnbp81#

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

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

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

8oomwypt2#

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

3pvhb19x3#

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

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

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

lyr7nygr4#

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

ccgok5k5

ccgok5k55#

它也可以通过以下方式完成:

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

例如:我在我的/home/repository中,我只想在/home/repository/service文件夹中运行测试
这里的服务文件夹是在我的当前文件夹。

waxmsbnn

waxmsbnn6#

您可以通过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

k3fezbri

k3fezbri7#

你也可以使用一个模式,例如

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 execute中或下面的所有测试:
mvn -Dtest="de/mypackage/sub/**" test

或使用Surefire 2.19.1或更高版本

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

还有更多的可能性,比如使用正则表达式,参见official documentation of running a single test

zzzyeukh

zzzyeukh8#

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
ne5o7dgx

ne5o7dgx9#

您可以参考以下场景:
(1)在maven构建期间跳过所有测试执行

mvn package -DskipTests

(2)执行所有测试用例

mvn test

(3)执行特定测试组

mvn test -DincludeGroups=TestGroup1,TestGroup2

(4)在执行过程中测试特定的测试组

mvn test -DexcludeGroups=TestGroup3,TestGroup4

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

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

(6)执行特定测试

mvn test -Dtest=Test1,Test2

我希望这将是更有帮助的你与执行不同的组合。

相关问题