【问题标题】:Maven Cobertura: unit test failed but build successMaven Cobertura:单元测试失败但构建成功
【发布时间】:2011-02-28 12:54:00
【问题描述】:

我已经在我的 pom 中配置了 cobertura 代码覆盖率:

<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>cobertura-maven-plugin</artifactId>
<version>2.4</version>
<configuration>
    <instrumentation>
        <excludes>
            <exclude>**/*Exception.class</exclude>
        </excludes>
    </instrumentation>
    <formats>
        <format>xml</format>
        <format>html</format>
    </formats>
</configuration>
</plugin>

并通过以下命令开始测试:

mvn clean cobertura:cobertura

但如果其中一个单元测试失败,Cobertura 只会记录此信息并且不会标记构建失败。

Tests run: 287, Failures: 1, Errors: 1, Skipped: 0

Flushing results...
Flushing results done
Cobertura: Loaded information on 139 classes.
Cobertura: Saved information on 139 classes.
[ERROR] There are test failures.

.................................

[INFO] BUILD SUCCESS

如何在单元测试失败之一中配置 Cobertura 标记构建失败?

提前致谢。

【问题讨论】:

  • 您确定您不会尝试在一次扫描中做太多事情吗?通常的构建在单元测试失败时停止,但覆盖构建有点服务于不同的目的。我不知道你的具体情况,但你为什么要 Cobertura 让你的测试失败而不是全部运行并告诉你你有什么覆盖范围?

标签: java maven-2 cobertura


【解决方案1】:

如果你从 cobertura 插件运行一个特殊目标,如果测试没有成功通过,你不能强制 maven 使构建失败。插件目标会成功。

您可以将 cobertura 运行绑定到生命周期阶段(例如测试)。这将使 cobertura 目标在此阶段 (mvn clean test) 运行,如果此阶段失败,则会失败。

        <plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>cobertura-maven-plugin</artifactId>
            <version>2.4</version>
            <configuration>
                <formats>
                    <format>xml</format>
                    <format>html</format>
                </formats>
            </configuration>
            <executions>
                <execution>
                    <phase>test</phase>
                    <goals>
                        <goal>cobertura</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>

此解决方案的缺点是 cobertura 目标将在每个 test 阶段运行 ich。

【讨论】:

  • 感谢您的回答。此解决方案有效,但在这种情况下,maven 运行单元测试两次。如果我使用选项 -Dmaven.test.skip=true,maven 不会运行任何测试。你能澄清一下如何解决它吗?我发现了以下 cobertura 错误MCOBERTURA-83。是否有其他解决方法可以在不打源代码的情况下修复测试双启动?
  • 我不知道这是否可以解决。在这种情况下,有一个“正常”测试运行(surefire 插件)和一个“插入测试运行”(cobertura)。我怀疑这可以“合并”成一次运行。
【解决方案2】:

您可以将 haltOnFailure 属性设置为 true。

<configuration>
    ...
    <check>
        ...
        <haltOnFailure>true</haltOnFailure>
        ...
    </check>
</configuration>

【讨论】:

  • 谢谢你的回答,但是这个配置属性对我没有帮助:(
  • 这个选项似乎启用了覆盖率检查,例如项目的覆盖率很低。
猜你喜欢
  • 2015-11-15
  • 1970-01-01
  • 2017-09-23
  • 2020-03-16
  • 1970-01-01
  • 2021-07-05
  • 2015-04-25
  • 2016-12-08
  • 2015-03-26
相关资源
最近更新 更多