昨天学习了在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%