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失败解决方法

maven本地库更新失败

Azure databricks:通过 API 将 maven 库安装到集群会导致错误(库解析失败。原因:java.lang.RuntimeException)

Jenkins-如果测试失败,即使构建通过,也要查看任何失败图标

当达到测试超时时,Maven 肯定会失败构建,即使失败时设置为 true