jacoco:分析单元测试覆盖率的利器

昨天学习了在eclipse中使用jacoco的方法,今天来学习一下使用方法 

1、白盒测试的六种方法

(1)何为白盒测试

白盒测试又称结构测试、透明盒测试、逻辑驱动测试或者基于代码的测试。

白盒测试是一种测试用例设计方法,白盒测试指的是程序内部结构和运作机制是可见的。

(2)白盒测试的目的

通过检查软件内部的逻辑结构,对软件中的逻辑路径进行覆盖测试;在程序不同地方设置检查点,检查程序的状态,以确定实际运行状态是否与预期状态保持一致。

(3)白盒测试的方法

大致分为静态测试和动态测试两种方法。

1)静态测试

是一种不执行程序而进行测试的技术。

静态测试的主要目的是检查软件的表示和描述是否一致,没有冲突或者没有歧义。

2)动态测试

当软件系统在模拟或真实的环境中执行前、过程中和执行后,对其行为分析。它显示了一个系统在检查状态下是否正确。

在动态分析技术中,最重要的技术是路径和分支测试。

(4)举例说明

1)语句覆盖

使程序中的每个可执行语句都能执行一次的测试用例。

语句覆盖

2)判定/分支覆盖

设计的测试用例可以覆盖到每个判定/分支语句的结果为True/False。

判定/分支覆盖

3)条件覆盖

设计测试用例时,针对每个判定中的每个条件表达式的T/F各取值一次,不考虑判断语句的计算结果。

条件覆盖

4)判定/分支条件覆盖

设计测试用例时,使得判定语句中每个条件表达式的所有可能结果最少出现一次,每个判定语句本身的结果也最少出现一次。

判定/分支条件覆盖

5)条件组合覆盖

设计测试用例时,使得每个判断语句中条件结果的所有可能组合至少出现一次。

条件组合覆盖

6)路径覆盖

设计测试用例时,覆盖程序中所有可能的执行路径。

优点:可以对程序进行彻底的测试用例覆盖,比前面5种的覆盖度高。

缺点:由于路径覆盖需要对所有可能的路径进行覆盖,那么需要设计大量、复杂的测试用例,使得工程量呈指数级增长。

路径覆盖虽然是一种比较强的覆盖,但未必考虑判断语句中条件表达式结果的组合,并不能代替条件覆盖和条件组合覆盖。

2、创建被测基类

public class allType {

	public int base(int a, int b) {
		if(a > 0 && b > 0) {
			return 1;
		}else {
			return 0;
		}
	}	
}

3、创建测试类

 

 

package 代码覆盖率;

import static org.junit.jupiter.api.Assertions.*;

import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;

class allTypeTest {

	allType a;
	
	@BeforeEach
	void setUp() throws Exception {
		a = new allType();
	}

	@Test
	void yuju() {
		
		// 语句覆盖
		assertEquals(1, a.base(1, 1)); // A^B=T
	}
	
	@Test
	void panding() {
		
		// 判定/分支覆盖
		assertEquals(1, a.base(1, 1));  //a^b=T
		assertEquals(0, a.base(1, 0));  //a^b=F
	}
	
	@Test
	void tiaojian() {
		
		// 条件覆盖
		assertEquals(1, a.base(1, 1));  //a=T,b不考虑
		assertEquals(0, a.base(0, 1));  //a=F,b不考虑
		assertEquals(1, a.base(1, 1));  //a不考虑,b=T
		assertEquals(0, a.base(1, 0));  //a不考虑,b=F

	}
	
	@Test
	void tiaojianfugai() {
		
		// 判定覆盖 + 条件覆盖
		
		assertEquals(1, a.base(1, 1));  //a^b=T
		assertEquals(0, a.base(1, 0));  //a^b=F
		
		assertEquals(1, a.base(1, 1));  //a=T,b不考虑
		assertEquals(0, a.base(0, 1));  //a=F,b不考虑
		assertEquals(1, a.base(1, 1));  //a不考虑,b=T
		assertEquals(0, a.base(1, 0));  //a不考虑,b=F
	}
	
	@Test
	void tiaojianzuhe() {
		
		// 条件组合覆盖
		assertEquals(0, a.base(0, 0));  // a=F,b=F
		assertEquals(0, a.base(0, 1));  // a=F,b=T
		assertEquals(0, a.base(1, 0));  // a=T,b=F
		assertEquals(0, a.base(1, 1));  // a=T,b=T
	}

}

语句覆盖-覆盖率:75%

判定/分支覆盖-覆盖率:100%,但是有条件没有覆盖到

条件覆盖-覆盖率:100%

判定条件覆盖-覆盖率:100%

条件组合覆盖-覆盖率:100%

参考博文:https://blog.csdn.net/write6/article/details/78702977

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值