易于使用的单位和集成代码

此示例说明如何使用Maven和Sonar生成单元测试和集成测试的覆盖率。 它使用非常简单的技术,只需10-15分钟即可在任何现有的Maven构建中运行。 它可用于单元,集成,ATDD或任何其他类型的测试套件。 覆盖率结果显示在Sonar中。

有什么事吗?

我的前一篇文章展示了如何使用JUnit类别轻松拆分单元和集成测试套件。
http://johndobie.blogspot.com/2012/04/unit-and-integration-tests-with-maven.html

下一步的逻辑步骤是能够查看每个测试套件的指标。
本示例说明了如何使用Jacoco和Sonar进行此操作。

示例代码在这里。

svn co https://designbycontract.googlecode.com/svn/trunk/examples/maven/categories-sonar
mvn clean install sonar:sonar

声纳

此示例依靠Sonar来显示代码覆盖率指标。 Sonar是一个狂热的开源代码质量工具,每个人都应该看看。
http://www.sonarsource.org/

对于我们的示例,需要进行几个简单的配置更改。
以下链接显示了如何安装Sonar并进行更改
http://johndobie.blogspot.com/p/setting-up-sonar.html

拆分测试套件。

此示例依靠JUnit类别来划分测试。

我们定义一个标记器接口,然后将其应用于我们想要拆分的测试。

public interface IntegrationTest {}

类别注释将添加到您的测试类中。 它采用新界面的名称。

import org.junit.experimental.categories.Category;
@Category(IntegrationTest.class)
public class ExampleIntegrationTest{
 @Test
 public void longRunningServiceTest() throws Exception {
    
 }
}

整个过程非常简单,并在此处进行了详细说明
http://johndobie.blogspot.com/2012/04/unit-and-integration-tests-with-maven.html

分析代码覆盖率

我们使用jacoco插件进行代码覆盖。 这里有Jacoco的概述。
http://johndobie.blogspot.com/2012/01/unit-test-code-coverage.html
我们首先定义jacoco coverage文件的目录。

<coverage.reports.dir>
  ${basedir}/target/coverage-reports
</coverage.reports.dir>
<sonar.jacoco.reportPath>
  ${coverage.reports.dir}/jacoco-unit.exec
</sonar.jacoco.reportPath>
<sonar.jacoco.itReportPath>
  ${coverage.reports.dir}/jacoco-it.exec
</sonar.jacoco.itReportPath>
<sonar.jacoco.jar>
  ${basedir}/lib/jacocoagent.jar
</sonar.jacoco.jar>

配置单元测试

然后,我们通过运行标准的surefire插件(其中Jacoco代理指向$ {sonar.jacoco)来启动单元测试 reportPath} 。 这用于存储单元测试代码覆盖率结果。

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-surefire-plugin</artifactId>
    <version>2.7.2</version>
<configuration>
 <argLine>-javaagent:${sonar.jacoco.jar}=destfile=${sonar.jacoco.reportPath},includes=com.*</argLine>
 <includes>
  <include>**/*.class</include>
 </includes>
 <excludedGroups>com.test.annotation.type.IntegrationTest</excludedGroups>
</configuration>
</plugin>

我们忽略以下配置的任何标记的集成测试

<excludedGroups>com.test.annotation.type.IntegrationTest</excludedGroups>

配置集成测试

对于集成测试,我们使用故障保护插件,并将Jacoco代理指向$ {sonar.jacoco。 itReportPath} 。 这用于存储集成测试代码覆盖率结果。

<plugin>
<plugin>
 <artifactId>maven-failsafe-plugin</artifactId>
 <version>2.12</version>
 <dependencies>
  <dependency>
   <groupId>org.apache.maven.surefire</groupId>
   <artifactId>surefire-junit47</artifactId>
   <version>2.12</version>
  </dependency>
 </dependencies>
 <configuration>
  <groups>com.test.annotation.type.IntegrationTest</groups>
 </configuration>
 <executions>
  <execution>
   <goals>
    <goal>integration-test</goal>
   </goals>
   <configuration>
    <argLine>-javaagent:${sonar.jacoco.jar}=destfile=${sonar.jacoco.itReportPath},includes=com.*</argLine>
    <includes>
     <include>**/*.class</include>
    </includes>
   </configuration>
  </execution>
 </executions>
</plugin>

我们还告诉插件使用正确的JUnit类别

<configuration>
 <groups>com.test.annotation.type.IntegrationTest</groups>
</configuration>

运行这些文件时,它们将生成以下2个覆盖文件。

开始声纳

在运行构建之前,您需要启动Sonar服务器。
http://johndobie.blogspot.com/p/setting-up-sonar.html

运行示例

我们可以使用以下命令运行全部

mvn clean install sonar:sonar

如果浏览到声纳实例,您将看到以下结果。

参考: Agile Engineering Techniques博客上的JCG合作伙伴 John Dobie提供的Easy Unit和Integration Code Coverage


翻译自: https://www.javacodegeeks.com/2012/05/easy-unit-and-integration-code-coverage.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值