Cobertura和Maven:集成和单元测试的代码覆盖率

在姜黄项目中,我们每晚维护一个仪表板。 在仪表板上,我们收集有关项目的统计信息,包括代码覆盖率,findbugs分析和其他指标。 我们一直在使用Maven EMMA插件来提供代码覆盖,但是遇到了EMMA问题。 在对类进行检测后,这会导致测试失败。 因此,由于在构建过程中需要准确的测试结果,因此我们禁用了代码覆盖率。 但是,我们仍然需要覆盖代码,更重要的是,我们还需要覆盖现有测试套件,这实际上是一个集成测试套件,而不是单元测试套件。

CoberturaEMMA插件实际上都是设计用于单元测试的。 因此,我们必须解决该限制。

  1. 首先,我们需要对类进行检测。
  2. 其次,我们需要打包检测的类,并在以后的构建中使用它们。
  3. 需要告诉集成测试为其使用依赖的检测类。
  4. 生成结果的XML报告。

我尝试过这样做,但又不依赖于ant,但是每次我尝试使用maven-site-plugin并将其配置为生成报告时,都会抱怨cobertura:check没有正确配置。 在我们的情况下,我不需要运行检查,只需要生成的报告即可。 于是Ant和AntContrib得以营救。 以下是我想出的完整的Maven个人资料:

<profile>
         <id>cobertura</id>
         <dependencies>
            <dependency>
               <groupId>net.sourceforge.cobertura</groupId>
               <artifactId>cobertura</artifactId>
               <optional>true</optional>
               <version>1.9.4.1</version>
            </dependency>
         </dependencies>
         <build>
            <plugins>
               <plugin>
                  <groupId>org.codehaus.mojo</groupId>
                  <artifactId>cobertura-maven-plugin</artifactId>
                  <configuration>
                     <instrumentation>
                        <excludes>
                           <exclude>org/ebayopensource/turmeric/test/**/*.class</exclude>
                           <exclude>org/ebayopensource/turmeric/common/v1/**/*.class</exclude>
                        </excludes>
                     </instrumentation>
                  </configuration>
                  <executions>
                     <execution>
                        <id>cobertura-instrument</id>
                        <phase>process-classes</phase>
                        <goals>
                           <goal>instrument</goal>
                        </goals>
                     </execution>
                  </executions>
               </plugin>
               <plugin>
                  <groupId>org.apache.maven.plugins</groupId>
                  <artifactId>maven-jar-plugin</artifactId>
                  <executions>
                     <execution>
                        <id>cobertura-jar</id>
                        <phase>post-integration-test</phase>
                        <goals>
                           <goal>jar</goal>
                        </goals>
                        <configuration>
                           <classifier>cobertura</classifier>
                           <classesDirectory>${basedir}/target/generated-classes/cobertura</classesDirectory>
                        </configuration>
                     </execution>
                  </executions>
               </plugin>
               <plugin>
                  <groupId>org.apache.maven.plugins</groupId>
                  <artifactId>maven-install-plugin</artifactId>
                  <version>2.3.1</version>
                  <executions>
                     <execution>
                        <id>cobertura-install</id>
                        <phase>install</phase>
                        <goals>
                           <goal>install</goal>
                        </goals>
                        <configuration>
                           <classifier>cobertura</classifier>
                        </configuration>
                     </execution>
                  </executions>
               </plugin>
               <plugin>
                  <groupId>org.apache.maven.plugins</groupId>
                  <artifactId>maven-antrun-plugin</artifactId>
                  <executions>
                     <execution>
                        <phase>verify</phase>
                        <configuration>
                           <tasks>
                              <taskdef classpathref='maven.runtime.classpath'
                                 resource='tasks.properties' />
                              <taskdef classpathref='maven.runtime.classpath'
                                 resource='net/sf/antcontrib/antcontrib.properties' />
                              <available
                                 file='${project.build.directory}/cobertura/cobertura.ser'
                                 property='ser.file.exists' />
                              <if>
                                 <equals arg1='${ser.file.exists}'
                                    arg2='true' />
                                 <then>
                                    <echo message='Executing cobertura report' />
                                    <mkdir
                                       dir='${project.build.directory}/site/cobertura' />
                                    <cobertura-report
                                       format='xml'
                                       destdir='${project.build.directory}/site/cobertura'
                                       datafile='${project.build.directory}/cobertura/cobertura.ser' />
                                 </then>
                                 <else>
                                    <echo message='No SER file found.' />
                                 </else>
                              </if>
                           </tasks>
                        </configuration>
                        <goals>
                           <goal>run</goal>
                        </goals>
                     </execution>
                  </executions>
                  <dependencies>
                     <dependency>
                        <groupId>ant-contrib</groupId>
                        <artifactId>ant-contrib</artifactId>
                        <version>20020829</version>
                     </dependency>
                  </dependencies>
               </plugin>
            </plugins>
         </build>
      </profile>

注意:请勿在此配置文件中使用cobertura:cobertura目标。 由于它将尝试对类进行两次检测,因此构建将失败。

必须使用Ant和AntContrib,因为没有cobertura:report目标,因为它希望在网站生成阶段运行。 但是,这会导致检查目标也可以运行,而我们则不需要。 因此,也许,我将制作一个补丁以添加报告目标,以便仅运行报告而不必运行站点目标。 希望这对某些人有帮助,因为我为此花费了很多时间。

祝您编程愉快,别忘了分享!

参考: Intelligent Cramps博客上的JCG合作伙伴 David Carver 使用Cobertura和Maven为集成和单元测试启用代码覆盖率


翻译自: https://www.javacodegeeks.com/2012/09/cobertura-and-maven-code-coverage-for.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值