我正在为STS中的多个模块的spring boot项目运行maven install。我可以看到,很少有测试用例失败,但maven安装通过并显示构建成功。测试没有被跳过,它们在安装阶段运行,而且还会在测试失败的情况下生成surefire报告,但不知何故构建通过了。我希望构建失败,因为测试失败,任何指针都被赞赏?
<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
最后它只显示所有模块构建成功。一旦检测到失败,它是否应该立即停止建立战争?
由于
答案 0 :(得分:3)
构建生命周期中的测试阶段由Surefire插件执行。其中一个选项testFailureIgnore
用于执行测试并成功完成构建,而不管结果如何。这在向Sonar生成指标时非常有用。
激活此类选项的一种方法是使用-Dmaven.test.failure.ignore
,也许您已在构建中启用了此选项。
答案 1 :(得分:1)
根据surefire-maven-plugin的文档,它不会因设计而导致测试失败。原因是:surefire-maven-plugin应该执行所有测试并提供一般统计数据。
如果您想节省时间,可以使用此参数:
<skipAfterFailureCount>N</skipAfterFailureCount>
在N个失败后停止执行测试。
maven-surefire-report-plugin可用于报告分析:
https://maven.apache.org/surefire/maven-surefire-report-plugin/
答案 2 :(得分:-1)
使用故障安全插件运行失败的测试有可能吗?这个插件不会使失败测试的构建失败,如documented on their site:
如果使用Surefire插件运行测试,那么当测试失败时,构建将在集成测试阶段停止,并且集成测试环境不会被正确拆除。
在构建生命周期的集成测试和验证阶段使用Failsafe插件来执行应用程序的集成测试。在集成测试阶段,Failsafe插件不会使构建失败,从而使后集成测试阶段能够执行。