用jacoco和junit对maven项目进行java代码覆盖率测试

本文介绍如何使用Jacoco进行Java项目的单元测试覆盖率检查,包括配置Maven插件、生成测试报告等步骤,以及Jacoco的优势和使用场景。

在实际的项目过程当中,我们对java项目的测试工作往往存在反复、漏测的情况,导致项目会出现一些意想不到的情况。所以Junit单元测试可以作为项目执行过程当中一个不错的单元测试方案。
如果项目中使用Junit做单元测试,那么测试的覆盖率就变得尤为重要。之前使用了很多其他的测试覆盖率的插件,但是亲测发现,jacoco绝对算得上是一个很不错的选择。
那么jacoco具体在测试覆盖率上有哪些优势呢?我认为,jacoco有以下优势:
1.完美兼容Junit,针对Junit的测试用例,可以准确的检测覆盖率。
2.使用简单方便,只需少量配置和一条命令,就可以生成测试覆盖率的文档。
3.文档形式多样,有xml、csv、和html格式的报告。
4.测试报告详尽,可以明确的标记具体代码的执行轨迹。便于开发补充和修改用例。
这里,我简单的介绍下jacoco的使用:
首先,我们需要在maven的配置文件中配置如下:

<build>
		<plugins>
			<plugin>
				<groupId>org.jacoco</groupId>
				<artifactId>jacoco-maven-plugin</artifactId>
				<version>0.8.3</version>
				<executions>
					<execution>
						<id>default-prepare-agent</id>
						<goals>
							<goal>prepare-agent</goal>
						</goals>
					</execution>
					<execution>
						<id>default-report</id>
						<phase>prepare-package</phase>
						<goals>
							<goal>report</goal>
						</goals>
					</execution>
					<execution>
						<id>default-check</id>
						<goals>
							<goal>check</goal>
						</goals>
						<configuration>
							<rules>
								<rule implementation="org.jacoco.maven.RuleConfiguration">
									<element>BUNDLE</element>
									<limits>
										implementation is needed only for Maven 2
										<limit implementation="org.jacoco.report.check.Limit">
											<counter>COMPLEXITY</counter>
											<value>COVEREDRATIO</value>
											<minimum>0.60</minimum>
										</limit>
									</limits>
								</rule>
							</rules>
						</configuration>
					</execution>
				</executions>
			</plugin>
		</plugins>
	</build>
上述配置完成后,如果需要生成测试文档,只需要执行如下命令:
mvn clean install jacoco:prepare-agent jacoco:report
生成出来的html文件效果下:

最终效果
附上测试的源代码(JacocoTest.java):

package com.yin.test;

public class JacocoTest {

	public int maxNum(int... nums) {
		if (nums.length == 0) {
			throw new IllegalArgumentException("参数异常!");
		}
		int maxval = nums[0];
		for (int i : nums) {
			if (maxval >= i) {
				continue;
			}
			maxval = i;
		}
		return maxval;
	}

	public String print(int val) {
		if (val < 10) {
			return "0" + val;
		}
		return String.valueOf(val);
	}
}

测试代码(JacocoJunitTest.java):

package com.yin.test;

import org.junit.Assert;
import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.ExpectedException;

public class JacocoJunitTest {

	private JacocoTest test = new JacocoTest();

	/**
	 * 测试最大值函数(正常情况)
	 */
	@Test
	public void testMaxNumNormal() {
		Assert.assertEquals(3, test.maxNum(2, 1, 3));
	}

	@Rule
	public ExpectedException exc = ExpectedException.none();

	/**
	 * 测试最大值函数(正常情况)
	 */
	@Test
	public void testMaxNumException() {
		exc.expect(IllegalArgumentException.class);
		exc.expectMessage("参数异常!");
		test.maxNum();
	}

	@Test
	public void testPrint() {
		Assert.assertEquals("09", test.print(9));
		Assert.assertEquals("11", test.print(11));
	}

}

如果测试过程中,发现有覆盖不全的场景,也会明确标注出来:
错误提示图片示例

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值