Maven 安装通过但有测试失败
Posted
技术标签:
【中文标题】Maven 安装通过但有测试失败【英文标题】:Maven install passes but there are tests failing 【发布时间】:2016-05-17 09:58:01 【问题描述】:我正在为 STS 中具有多个模块的 Spring Boot 项目运行 maven 安装。
我可以看到很少有测试用例失败,但 maven 安装通过并显示构建成功。
测试没有被跳过,它们在安装阶段运行,并且还生成了失败的测试报告,但不知何故构建通过了。
我希望构建失败,因为测试失败,任何指针表示赞赏?
<properties>
<maven-surefire-plugin-version>2.16</maven-surefire-plugin-version>
<junit.version>4.12</junit.version>
...
...
</properties>
..
..
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>$junit.version</version>
...
...
</dependency>
<build>
<pluginManagement>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.0</version>
<configuration>
<source>$jdk.version</source>
<target>$jdk.version</target>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.16</version>
</plugins>
...
...
...
</pluginManagement>
</build>
Maven 日志:
Results :
Failed tests:
MyClassTest.testMyClass:35 null
Tests in error:
MyClass1Test.testMyClass:64 » NullPointer
Tests run: 3, Failures: 1, Errors: 1, Skipped: 0
[ERROR] There are test failures.
Please refer to /Users/XXX/yyyy/zzzz/target/surefire-reports for the individual test results.
[INFO]
[INFO] --- maven-war-plugin:2.6:war (default-war) @ zzzzz ---
[INFO] Packaging webapp
[INFO] Assembling webapp [zzzzz] in [/Users/XXXX/yyyyy/zzzz/target/zzzz-1.0.0]
[INFO] Processing war project
[INFO] Copying webapp resources [/Users/XXXX/zzzz/zzzz/src/main/webapp]
[INFO] Webapp assembled in [232 msecs]
[INFO] Building war: /Users/XXX/yyyyy/zzzzz/target/zzzzz-1.0.0.war
最后,它只显示所有模块构建成功。它不应该在检测到失败后立即停止构建战争吗?
【问题讨论】:
发布您的 POM。否则,这只是猜测工作。并发布您用于运行 Maven 的命令。 添加了相关部分,如果您想查看 pom.xml 中的任何特定部分,请告诉我。我使用 STS 作为 IDE,因此将 maven 运行为“运行方式”-> Maven 安装(m2 eclipse 插件) 您能否也发布您的 Maven 日志的相关部分?你所说的不应该发生。 mvn help:effective-pom 如何触发构建?有没有机会改变testFailureIgnore? 【参考方案1】:构建生命周期中的测试阶段由Surefire 插件执行。它的选项之一testFailureIgnore
用于执行测试并成功完成构建,而不管结果如何。这很有用,例如在为 Sonar 生成指标时。
激活此类选项的一种方法是使用-Dmaven.test.failure.ignore
,也许您已在构建中启用了此类选项。
【讨论】:
tbh,对于这个问题的所有 cmets,我有点失望,它是如此简单,而且 OP 在他的命令行上没有看到这个选项 ;-)【参考方案2】:根据 surefire-maven-plugin 的文档,它不会因设计而导致测试失败。原因是:surefire-maven-plugin 应该执行所有测试并提供一般统计信息。
如果你想节省时间,你可以使用这个参数:
<skipAfterFailureCount>N</skipAfterFailureCount>
在其中 N 个失败后停止执行测试。
maven-surefire-report-plugin 可用于报告分析:
https://maven.apache.org/surefire/maven-surefire-report-plugin/
【讨论】:
【参考方案3】:是否有可能使用故障安全插件运行失败的测试?这个插件不会在失败的测试中失败,如documented on their site:
如果您使用 Surefire 插件运行测试,那么当您遇到测试失败时,构建将在集成测试阶段停止,并且您的集成测试环境不会被正确拆除。
Failsafe 插件用于构建生命周期的集成测试和验证阶段,以执行应用程序的集成测试。 Failsafe Plugin 在集成测试阶段不会使构建失败,从而使集成测试后阶段能够执行。
【讨论】:
这是一个纯粹的猜测,所以这不是有用的答案。您应该发表评论以获取更多信息。第一个回答是没有意义的。 不,不使用故障保护插件。以上是关于Maven 安装通过但有测试失败的主要内容,如果未能解决你的问题,请参考以下文章
Jmeter maven插件|即使有失败,maven也不会失败
Jenkins安装maven integration plugin失败解决方法
Azure databricks:通过 API 将 maven 库安装到集群会导致错误(库解析失败。原因:java.lang.RuntimeException)