Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/366.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 按类级别强制实现JUnit的最小总覆盖率?_Java_Maven_Junit_Maven Surefire Plugin_Maven Enforcer Plugin - Fatal编程技术网

Java 按类级别强制实现JUnit的最小总覆盖率?

Java 按类级别强制实现JUnit的最小总覆盖率?,java,maven,junit,maven-surefire-plugin,maven-enforcer-plugin,Java,Maven,Junit,Maven Surefire Plugin,Maven Enforcer Plugin,目前,我在模块级别强制实现JUnit的最小总覆盖率。因此,如果总行覆盖率低于某个值(在我的情况下为80%),则构建失败。为此,我将maven surefire插件与maven enforcer插件、JUnit和JMockit一起使用。 pom文件部分如下所示 <build> <plugins> .... <plugin> <groupId>org.apache.maven.plugins</groupId> <ar

目前,我在模块级别强制实现JUnit的最小总覆盖率。因此,如果总行覆盖率低于某个值(在我的情况下为80%),则构建失败。为此,我将maven surefire插件与maven enforcer插件、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>   

....
org.apache.maven.plugins
maven surefire插件
2.18.1
org.apache.maven.surefire
surefire-junit4
2.18.1
${basedir}/target/coverageReport
html,合并
80
maven enforcer插件
保险范围,支票
执行
测试
覆盖率。检查。失败
....
....
org.jmockit
杰莫基特
1.17
org.jmockit
jmockit覆盖率
1.17
朱尼特
朱尼特
4.11
....    
我的问题是,有些类的覆盖率可能远远低于80%,只要总覆盖率不低于80%,构建仍然通过


那么,我有什么办法可以在班级层面上加强我的覆盖范围吗?

给你一个固执己见的非答案:不要这样做。不要让你的构建在错过的覆盖率上失败

以下是支持这一观点的理由:你正试图用技术手段解决一个社会问题

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

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


(好吧:如果你在一个高级环境中工作,每个开发者不仅接受你的想法,而且完全支持你;那么事情可能会不同。但是如果你生活在这样一个环境中,那么高覆盖率就会自然而然地来;而不是强制执行)。

+1我真的很欣赏这个想法。完全同意你的看法。事实上,我会把这个想法作为一个答案。但有时强制执行是唯一的选择。所以我要用更多的技术解决方案。但是很好的解释和回答。非常欢迎。祝你好运;希望有谁能给你想要的“真正的技术”答案;-)