Java 按类级别强制实现JUnit的最小总覆盖率?
目前,我在模块级别强制实现JUnit的最小总覆盖率。因此,如果总行覆盖率低于某个值(在我的情况下为80%),则构建失败。为此,我将maven surefire插件与maven enforcer插件、JUnit和JMockit一起使用。 pom文件部分如下所示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
<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我真的很欣赏这个想法。完全同意你的看法。事实上,我会把这个想法作为一个答案。但有时强制执行是唯一的选择。所以我要用更多的技术解决方案。但是很好的解释和回答。非常欢迎。祝你好运;希望有谁能给你想要的“真正的技术”答案;-)