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> 中统一声明:
-
<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免费学习笔记(深入)”;
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
- 命令行临时使用:
mvn package -Dmaven.test.skip=true - POM 中配置:
<maven.test.skip>true</maven.test.skip>(放在<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>更稳妥)
在 POM 中静态限定测试范围
若希望每次 mvn test 都只跑一部分,可在插件 <configuration> 中配置包含/排除规则:
-
<includes>指定白名单:<include>**/unit/**/*Test.java</include> -
<excludes>指定黑名单:<exclude>**/integration/**</exclude> - 默认匹配模式为:
**/Test*.java、**/*Test.java、**/*TestCase.java
这种写法适合划分单元测试与集成测试目录结构后做自动化隔离。

















