【问题标题】:Enforce minimum total JUnit coverage by class level?按类级别强制执行最小总 JUnit 覆盖率?
【发布时间】:2017-02-08 09:41:29
【问题描述】:

目前我在模块级别强制执行最小的 JUnit 总覆盖率。因此,如果总线路覆盖率低于某个值(在我的情况下为 80%),则构建失败。为此,我将 maven-surefire-plugin 与 maven-enforcer-plugin、JUnit 和 JMockit 一起使用。 pom 文件部分如下所示。

<build>
<plugins>
....
<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-surefire-plugin</artifactId>
    <version>2.18.1</version>
    <dependencies>
        <dependency>
            <groupId>org.apache.maven.surefire</groupId>
            <artifactId>surefire-junit4</artifactId>
            <version>2.18.1</version>
        </dependency>
    </dependencies>
    <configuration>
        <systemPropertyVariables>
            <coverage-outputDir>${basedir}/target/coverageReport</coverage-outputDir>
            <coverage-output>html,merge</coverage-output>               
            <coverage-check>80</coverage-check>
        </systemPropertyVariables>
    </configuration>
</plugin>
<plugin>
    <artifactId>maven-enforcer-plugin</artifactId>
    <executions>
        <execution>
            <id>coverage.check</id>
            <goals>
                <goal>enforce</goal>
            </goals>
            <phase>test</phase>
            <configuration>
                <rules>
                    <requireFilesDontExist>
                        <files>
                            <file>coverage.check.failed</file>
                        </files>
                    </requireFilesDontExist>
                </rules>
            </configuration>
        </execution>
    </executions>
</plugin>
....
</build>
<dependencies>
    ....
        <dependency>
            <groupId>org.jmockit</groupId>
            <artifactId>jmockit</artifactId>
            <version>1.17</version>
        </dependency>
        <dependency>
            <groupId>org.jmockit</groupId>
            <artifactId>jmockit-coverage</artifactId>
            <version>1.17</version>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.11</version>
        </dependency>
    ....    
  </dependencies>   

我的问题是,有些类的覆盖率可能远低于 80%,只要总覆盖率不低于 80%,构建仍然可以通过。

那么,我有什么办法可以在班级级别上强制执行我的覆盖范围?

【问题讨论】:

    标签: java maven junit maven-surefire-plugin maven-enforcer-plugin


    【解决方案1】:

    给你一个固执的非答案:不要那样做。不要因为错过的覆盖数字而使您的构建失败!

    以下是支持这一点的理由:您正在尝试使用技术手段解决社交问题。

    你真正的问题是:你想达到一定的代码质量,并且你认为你可以通过惩罚不遵守规定的人来实现。那真的行不通。迟早,人们会开始绕过这个想法。他们会寻找快速“让构建”快乐的方法;无视您通过要求合理的代码覆盖率来提高代码质量的想法。或者一些经理来找你,指出新功能/修复现在比当前的覆盖目标更重要。 然后呢?暂时禁用检查?允许更低的数字?

    当然,测量单元测试的覆盖率是一件好事。您应该经常这样做,并使您的开发人员可以轻松访问此信息(例如,将其放在某个仪表板上)。要求您的 DEV 团队致力于某些目标也是公平的。但是强迫每个人的喉咙里都有一些报道数字......不会奏效。

    (好吧:如果您在高级环境中工作,每个开发人员不仅接受您的想法,而且完全支持您;那么情况可能会有所不同。但是如果您生活在这样的环境中,那么高覆盖率会自行产生;无需强制执行)。

    【讨论】:

    • +1 我真的很欣赏这个想法。并且完全同意你的看法。事实上,我会把这个想法作为答案。但有时强制执行是唯一的选择。因此,我将采用更多技术解决方案。但真的很好的解释和答案。
    • 不客气。那么祝你好运;希望谁能给你你正在寻找的“真正的技术”答案;-)
    猜你喜欢
    • 1970-01-01
    • 2011-06-30
    • 2016-05-11
    • 1970-01-01
    • 2013-03-08
    • 2012-10-24
    • 2016-02-29
    • 1970-01-01
    相关资源
    最近更新 更多