[ERROR] Failed to execute goal org.apache.maven.plugins:maven-surefire-plugin:2.22.1:test (default-test) on project hisystem: There are test failures.
🔍 错误含义:
Maven 在执行单元测试(test
阶段)时发现了 测试失败(test failures),因此构建被标记为失败,阻止了后续打包(如生成 jar/war)等操作。
这不是编译错误,而是 单元测试没通过。
✅ 如何解决?
✅ 第一步:查看具体的测试失败报告
Maven 提示你:
Please refer to D:\javaPro\hisystem-master\target\surefire-reports
for the individual test results.
进入这个目录:
D:\javaPro\hisystem-master\target\surefire-reports
里面会有类似以下文件:
TEST-com.example.hisystem.UserServiceTest.xml
com.example.hisystem.UserServiceTest.txt
打开 .txt
文件,你会看到:
- 哪个测试类、哪个测试方法失败了
- 失败的原因(比如
NullPointerException
、断言失败AssertionError
等) - 堆栈跟踪(stack trace)
📌 示例:
Test set: com.example.hisystem.UserServiceTest
Tests run: 3, Failures: 1, Errors: 0, Skipped: 0, Time elapsed: 0.52 s <<< FAILURE!
testCreateUser Time elapsed: 0.01 s <<< FAILURE!
java.lang.AssertionError: expected:<true> but was:<false>
at com.example.hisystem.UserServiceTest.testCreateUser(UserServiceTest.java:25)
→ 这说明 testCreateUser
方法中,期望结果是 true
,但实际是 false
。
✅ 第二步:临时跳过测试(仅用于调试或紧急打包)
如果你只是想先打包看看,跳过测试(不推荐长期使用):
mvn install -DskipTests
或者(更暴力,不编译测试代码):
mvn install -Dmaven.test.skip=true
⚠️ 注意:这只是“绕过”问题,不是“解决问题”。
✅ 第三步:修复测试失败(推荐做法)
根据 surefire-reports
中的错误信息:
- 打开失败的测试类(如
UserServiceTest.java
) - 找到失败的测试方法(如
testCreateUser()
) - 检查:
- 是否依赖数据库?数据库是否启动?
- 是否有 Mock 没配置好(如使用了 Mockito)?
- 是否数据断言写错了?
- 是否服务层/DAO 层有空指针?
常见原因:
原因 | 解决方案 |
数据库未连接 | 启动 MySQL,检查 |
测试数据缺失 | 在测试中添加 |
使用了 | 补全 Mock 行为 |
断言逻辑错误 | 修改 |
✅ 第四步:启用详细日志(可选)
按提示使用 -e
或 -X
查看更详细错误:
mvn test -e
或
mvn test -X
-e
:显示错误堆栈-X
:开启调试模式,输出所有日志(很详细)
✅ 总结:解决步骤
- ✅ 进入
target/surefire-reports/
查看哪个测试失败 - ✅ 打开对应的
.txt
文件,看具体错误堆栈 - ✅ 修复代码或测试逻辑
- ✅ 再次运行
mvn test
直到通过 - ✅ 最后运行
mvn install
正常打包