Maven工程配置代码覆盖工具Jacoco

本篇博文我们将给出示例理解如何在Maven工程中配置Jacoco和如何使用Jacoco查看代码覆盖报告~

Jacoco是一个开源的Java代码覆盖率工具,Jacoco可以嵌入到Ant 、Maven中,并提供了EclEmma Eclipse插件,也可以使用JavaAgent技术监控Java程序。很多第三方的工具提供了对Jacoco的集成,如sonar、Jenkins等。

Maven工程

创建Maven工程

打开Eclipse,File->New->Project->Maven Project,新建一个Maven工程~

更多资料共享请加入Java高并发高可用架构:632103578

点击“Next”按钮,然后填写groupId和artifactId信息后点击"Finish"按钮即可~

groupId -->  com.xxx.tutorial

artifactId --> jacoco-demo

配置Jacoco

添加maven-complier-plugin

           <plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-compiler-plugin</artifactId>
				<version>3.6.1</version>
				<configuration>
					<skipMain>true</skipMain>
					<skip>true</skip>
					<source>1.7</source>
					<target>1.7</target>
				</configuration>
			</plugin>

添加jacoco-maven-plugin

          <plugin>
				<groupId>org.jacoco</groupId>
				<artifactId>jacoco-maven-plugin</artifactId>
				<version>${jacoco.version}</version>
				<executions>
					<execution>
						<id>prepare-agent</id>
						<goals>
							<goal>prepare-agent</goal>
						</goals>
					</execution>
					<execution>
						<id>report</id>
						<phase>prepare-package</phase>
						<goals>
							<goal>report</goal>
						</goals>
					</execution>
					<execution>
						<id>post-unit-test</id>
						<phase>test</phase>
						<goals>
							<goal>report</goal>
						</goals>
						<configuration>
							<dataFile>target/jacoco.exec</dataFile>
							<outputDirectory>target/jacoco-ut</outputDirectory>
						</configuration>
					</execution>
				</executions>
				<configuration>
					<systemPropertyVariables>
						<jacoco-agent.destfile>target/jacoco.exec</jacoco-agent.destfile>
					</systemPropertyVariables>
				</configuration>
			</plugin>

在这里,我们将单元测试结果的输出目录确定为target/jacoco-ut目录下~

完整的pom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>
	<groupId>com.xxx.tutorial</groupId>
	<artifactId>jacoco-demo</artifactId>
	<version>0.0.1-SNAPSHOT</version>

	<properties>
		<jacoco.version>0.7.5.201505241946</jacoco.version>
		<junit.version>4.12</junit.version>
	</properties>

	<dependencies>
		<dependency>
			<groupId>junit</groupId>
			<artifactId>junit</artifactId>
			<version>${junit.version}</version>
			<scope>test</scope>
		</dependency>
	</dependencies>
	<build>
		<plugins>
			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-compiler-plugin</artifactId>
				<version>3.6.1</version>
				<configuration>
					<skipMain>true</skipMain>
					<skip>true</skip>
					<source>1.7</source>
					<target>1.7</target>
				</configuration>
			</plugin>
			<plugin>
				<groupId>org.jacoco</groupId>
				<artifactId>jacoco-maven-plugin</artifactId>
				<version>${jacoco.version}</version>
				<executions>
					<execution>
						<id>prepare-agent</id>
						<goals>
							<goal>prepare-agent</goal>
						</goals>
					</execution>
					<execution>
						<id>report</id>
						<phase>prepare-package</phase>
						<goals>
							<goal>report</goal>
						</goals>
					</execution>
					<execution>
						<id>post-unit-test</id>
						<phase>test</phase>
						<goals>
							<goal>report</goal>
						</goals>
						<configuration>
							<dataFile>target/jacoco.exec</dataFile>
							<outputDirectory>target/jacoco-ut</outputDirectory>
						</configuration>
					</execution>
				</executions>
				<configuration>
					<systemPropertyVariables>
						<jacoco-agent.destfile>target/jacoco.exec</jacoco-agent.destfile>
					</systemPropertyVariables>
				</configuration>
			</plugin>
		</plugins>
	</build>

</project>

编写代码

Calculator.java

package com.xxx.tutorial;

/**
 * 
 * @author wangmengjun
 *
 */
public class Calculator {

	public int add(int a, int b) {
		return a + b;
	}

	public int sub(int a, int b) {
		return a - b;
	}
}

Calculator_Test.java

package com.xxx.tutorial;

import org.junit.Assert;
import org.junit.Test;

/**
 * 
 * @author wangmengjun
 *
 */
public class Calculator_Test {

	private Calculator instance = new Calculator();

	@Test
	public void testAdd() {
		int a = 10;
		int b = 20;
		int expected = 30;
		Assert.assertEquals(expected, instance.add(a, b));
	}

	@Test
	public void testSub() {
		int a = 10;
		int b = 20;
		int expected = -10;
		Assert.assertEquals(expected, instance.sub(a, b));
	}
}

代码结构如下:

运行并查看Jacoco报告

运行Maven test

执行Maven test, 控制台输出如下结果:

[INFO] Scanning for projects...
[INFO]                                                                         
[INFO] ------------------------------------------------------------------------
[INFO] Building jacoco-demo 0.0.1-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[INFO] 
[INFO] --- jacoco-maven-plugin:0.7.5.201505241946:prepare-agent (prepare-agent) @ jacoco-demo ---
[INFO] argLine set to -javaagent:D:\\java_tools\\Reponsitories\\Maven\\org\\jacoco\\org.jacoco.agent\\0.7.5.201505241946\\org.jacoco.agent-0.7.5.201505241946-runtime.jar=destfile=F:\\JavaDeveloper\\workspaces\\SpringMVCDubboExample\\jacoco-demo\\target\\jacoco.exec
[INFO] 
[INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ jacoco-demo ---
[WARNING] Using platform encoding (GBK actually) to copy filtered resources, i.e. build is platform dependent!
[INFO] Copying 0 resource
[INFO] 
[INFO] --- maven-compiler-plugin:3.6.1:compile (default-compile) @ jacoco-demo ---
[INFO] Not compiling main sources
[INFO] 
[INFO] --- maven-resources-plugin:2.6:testResources (default-testResources) @ jacoco-demo ---
[WARNING] Using platform encoding (GBK actually) to copy filtered resources, i.e. build is platform dependent!
[INFO] Copying 0 resource
[INFO] 
[INFO] --- maven-compiler-plugin:3.6.1:testCompile (default-testCompile) @ jacoco-demo ---
[INFO] Not compiling test sources
[INFO] 
[INFO] --- maven-surefire-plugin:2.12.4:test (default-test) @ jacoco-demo ---
[INFO] Surefire report directory: F:\JavaDeveloper\workspaces\SpringMVCDubboExample\jacoco-demo\target\surefire-reports

-------------------------------------------------------
 T E S T S
-------------------------------------------------------
Running com.xxx.tutorial.Calculator_Test
Tests run: 2, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.134 sec

Results :

Tests run: 2, Failures: 0, Errors: 0, Skipped: 0

[INFO] 
[INFO] --- jacoco-maven-plugin:0.7.5.201505241946:report (post-unit-test) @ jacoco-demo ---
[INFO] Analyzed bundle ‘jacoco-demo‘ with 1 classes
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 4.972 s
[INFO] Finished at: 2017-06-16T21:02:30+08:00
[INFO] Final Memory: 15M/244M
[INFO] ------------------------------------------------------------------------

我们可以看到target目录下,已经生成了Jacoco的单元测试结果报告~

查看Jacoco报告

打开浏览器,在URL栏输入

点击"com.xxx.tutorial"链接,查看这个com.xxx.tutorial包下的类。

再点击"Calculator"链接,展示Calculator类的方法信息~

再点击任何方法的连接,将会出现该类代码覆盖的情况:

绿色的表示覆盖到的,如果没有覆盖则会用红色背景表示

至此,

在Maven工程中配置Jacoco插件,运行并查看执行报告结果的示例就完成了~

另外,如果Eclipse工程中安装了EclEmma插件,执行测试类,

也能得到相应的结果,如:

更多资料共享请加入Java高并发高可用架构:632103578

时间: 2024-10-01 04:25:10

Maven工程配置代码覆盖工具Jacoco的相关文章

maven工程配置pom.xml实现mybatis的访问数据库操作

pom.xml配置: pom.xml 这个配置还有不足请在下方给出建议 I:  我这里测试三个 : 分别是有@的 DemoMapper(接口): IDemoMapper.interface package com.test; import com.pojo.Demo; import org.apache.ibatis.annotations.Select; import java.util.List; public interface DemoMapper { /** * 查询数量 count(

Eclipse Kepler maven工程配置JDK1.8

首先需要下载插件:"Help" --> "Market Place" --> Search for java 8 kepler. install Java 8 support eclipse kepler sr2, Java 8 Facets for web tools eclipse kepler sr2 Java 8 support for m2e for Eclipse Kepler SR2 (if required) 然后在pom.xml文件中配

Maven工程配置依赖

1.下载 安装 官网下载maven :http://maven.apache.org/download.cgi ,下载时候注意版本,IDEA旧版本如我用的2017在安装Maven时可能会报错,此时别下载最新的Maven版本. 下载完成后解压文件,注意文件路径 添加bin路径至系统环境变量用 mvn -version 命令在 cmd 窗口测试,若版本号对应正确,则安装成功. 2.配置 自定义本地仓库目录 设置setting.xml文件,添加mirror镜像 <mirror> <id>

开发流程和Maven的配置

按照何种开发模型? V模型:项目需求--->概要设计(功能模块) --->详细设计(页面的设计,数据库的设计) --->编码(框架的搭建,功能的实现)---->测试(单元测试,黑盒测试,性能测试,回归测试)--->发布(war包,jar包)--->项目评审--->项目完成 敏捷开发:快速迭代 数据库的设计的时候: 1.提取功能模块的名称. 用户,商品类别,商品,入库,出库,库存,供应商(公司信息) 每个功能模块会单独形成一张表. 2.根据每个表,形成它的字段(可以

Maven 工程下 Spring MVC 站点配置 (三) C3P0连接池与@Autowired的应用

Maven 工程下 Spring MVC 站点配置 (一) Maven 工程下 Spring MVC 站点配置 (二) Mybatis数据操作 前两篇文章主要是对站点和数据库操作配置进行了演示,如果单单实现这两个需求的话,那么基本足够,但是很多时候一个网站除了仅仅能够访问数据库是不够的,它还需要对性能以及更简化的步骤有着更多的要求,这一篇重点就是帮助我们如何去实现数据连接池管理与更简化便利的开发步骤. 如果你觉得自己能写出更高效率的连接池,那你可以不需要这篇文章了,我更建议你可以去开源组织毛遂自

maven工程运行maven test提示JAVA_HOME 未配置的解决

maven工程运行maven test提示JAVA_HOME 未配置的解决: ----- 以下内容转自http://blog.sina.com.cn/s/blog_9ba71d0b01014bux.html JDK (Java Development Kit) Java开发工具包,很直白的说就是为开发人员准备的SDK. SDK (Software Development Kit)软件开发包.所以我们解压JDK 会发现在安装位置 有一个JDK有一个JRE(Java Runtime Envirome

代码静态分析工具PC-LINT安装配置

代码静态分析工具PC-LINT安装配置--step by step                             作者:ehui928                             2006-5-20 PC-Lint是C/C++软件代码静态分析工具,你可以把它看作是一种更加严格的编译器.它不仅可以检查出一般的语法错误,还可以检查出那些虽然符合语法要求但不易发现的潜在错误. C语言的灵活性带来了代码效率的提升,但相应带来了代码编写的随意性,另外C编译器不进行强制类型检查,也带来

maven工程的如何进行代码调试

1.maven项目的父项目右键选择:maven build    注意:       1.选择Browser workspace,让BaseDirectory变成:${***}形式.       2.选择目标,比如:tomcat7:run 2.选择source:通过add增加workSpace 3.选择debug模式运行配置. 就可以跟普通web项目一样调试了. 作者:sdjnzqr 出处:http://www.cnblogs.com/sdjnzqr/ 版权:本文版权归作者和博客园共有 转载:欢

solr分布式索引【实战一、分片配置读取:工具类configUtil.java,读取配置代码片段,配置实例】

1 private static Properties prop = new Properties(); 2 3 private static String confFilePath = "conf" + File.separator + "config.properties";// 配置文件目录 4 static { 5 // 加载properties 6 InputStream is = null; 7 InputStreamReader isr = null;