如何用Maven运行已编译单元测试无需重编译且按指定顺序执行
Maven 测试执行问题解决方案
跳过编译直接运行已编译测试
你可以直接调用 Maven Surefire 插件的独立测试目标,关闭编译步骤即可复用之前 mvn test-compile 生成的字节码,无需重新编译项目:
mvn -DskipCompile=true surefire:test
注意:执行前不要运行
mvn clean命令,确保target/classes、target/test-classes目录下的字节码是你需要的最新编译结果。
按自定义列表和指定顺序执行测试
方案一:命令行直接指定顺序
Surefire 插件支持按传入顺序执行-Dtest参数里的测试项,多个测试用逗号分隔即可,执行顺序和你写入的顺序完全一致,示例:
mvn -DskipCompile=true -Dtest=UserServiceTest#testAdd,OrderServiceTest#testQuery,PayServiceTest#testCancel surefire:test
上述命令会严格按照 testAdd → testQuery → testCancel 的顺序执行测试。
方案二:通过测试列表文件固化执行顺序
如果测试数量较多,推荐将测试列表写入独立文件维护,避免每次输入过长命令:
- 在项目根目录新建
custom-test-list.txt,按你需要的执行顺序逐行写入测试方法,格式参考:
UserServiceTest#testAdd OrderServiceTest#testQuery PayServiceTest#testCancel
- 修改 pom.xml 中 Surefire 插件的配置,关联测试列表文件:
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-surefire-plugin</artifactId> <version>3.2.2</version> <configuration> <includesFile>custom-test-list.txt</includesFile> </configuration> </plugin>
- 直接执行以下命令即可按文件内的顺序运行所有测试:
mvn -DskipCompile=true surefire:test
注意事项
- 如果你使用 JUnit 5 作为测试框架,需要确保 maven-surefire-plugin 版本不低于 2.22.0,否则自定义测试顺序功能会失效。
- 如需临时跳过列表中的个别测试,可以在对应行开头加
#注释即可,无需修改pom配置。
内容的提问来源于stack exchange,提问作者Kahsius
相关产品推荐
相关产品推荐

