maven 中通过 maven-surefire-plugin 控制测试执行:设 skiptests=true 可跳过运行但保留编译;maven.test.skip=true 则同时跳过编译与运行;-dtest=xxx 支持动态运行指定类或方法;pom 中配置 includes/excludes 可静态限定测试范围。

在 Maven 项目中,通过 maven-surefire-plugin 控制单元测试的执行(跳过或只运行特定测试)是日常开发中的高频需求。核心在于理解两个维度:是否执行、执行哪些——前者靠开关参数,后者靠匹配规则。
跳过所有测试执行(保留编译)
设置 skipTests=true 是最常用方式,它让 Surefire 插件跳过运行阶段,但测试类仍会被编译(避免因语法错误导致后续构建失败)。推荐在 pom.xml 的 <properties></properties> 中统一声明:
-
<skiptests>true</skiptests>—— 简洁、自动生效,Spring Boot 项目尤其适用 - 或在插件配置中显式写:
<skiptests>true</skiptests>,适合需单独控制某模块时
注意:skipTests 和 maven.test.skip 效果相同,但后者还会跳过测试编译(更彻底),一般不推荐除非明确需要加速 CI 初步构建。
完全跳过测试编译与执行
用 maven.test.skip=true 参数可同时跳过 maven-compiler-plugin 的 testCompile 和 maven-surefire-plugin 的 test 阶段:
Java项目代码review工具。分析Git变更+完整调用链路上下文,推断业务需求,进行多维度评分和分类汇总,生成完整PRD文档。包含细粒度Java代码审查清单(Null安全、异常处理、Streams、并发、equals/hashCode、资源管理、API设计、性能、MyBatis/ORM、事务边界、SQL/DD...
- 命令行临时使用:
mvn package -Dmaven.test.skip=true - POM 中配置:
<maven.test.skip>true</maven.test.skip>(放在<properties></properties>内)
适用于本地快速验证主代码逻辑、或某些测试依赖不可用的场景。
只运行指定的测试类或方法
无需改 POM,直接通过 -Dtest=xxx 动态指定:
-
mvn test -Dtest=UserServiceTest—— 运行单个类 -
mvn test -Dtest=UserServiceTest#testCreateUser—— 运行类中某个方法(JUnit 5+ 支持) -
mvn test -Dtest=UserService*,OrderService*—— 逗号分隔,支持通配符 -
mvn test -Dtest=!IntegrationTest—— 排除(需 Surefire 2.22+,配合<excludes></excludes>更稳妥)
在 POM 中静态限定测试范围
若希望每次 mvn test 都只跑一部分,可在插件 <configuration></configuration> 中配置包含/排除规则:
-
<includes></includes>指定白名单:<include>**/unit/**/*Test.java</include> -
<excludes></excludes>指定黑名单:<exclude>**/integration/**</exclude> - 默认匹配模式为:
**/Test*.java、**/*Test.java、**/*TestCase.java
这种写法适合划分单元测试与集成测试目录结构后做自动化隔离。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










