单元测试
单元测试
例子
/**
* @author xxx
* @date 2021/9/24
*/
public class Main {
public int example(int x,int y,int z){
int result=0;
if(x>=3&&y==0){
result=z+x;
}
if(z<=5||x<z){
result=result+x;
}else {
result=result+y;
}
return result;
}
}
流程图
语句覆盖 statement coverage
判定表达式之外的语句,全部覆盖
判定表达式之后的语句
result = z+x
result = result + y
result = result + x
只要覆盖这3条语句,就是语句覆盖
覆盖了方法的全部代码行
测试代码
import org.junit.Test;
import static org.junit.Assert.*;
/**
* @author xxx
* @date 2021/9/24
*/
public class MainTest {
Main main = new Main();
@Test
public void test(){
int expect = 4;
int acutual = main.example(4,0,6);
assertEquals(expect,acutual);
}
}
测试运行
单元测试的好处,设计过测试脚本后,可以无限次反复执行。
回归测试 regression testing
指修改了旧代码后,重新进行测试,以确保修改没有引入新的错误或者导致其他代码发生错误。
判定覆盖 decision coverage
测试用例能够使得程序中每个判定表达式的值为true和为false的分支都至少执行一次测试
条件覆盖 condition coverage
使得程序中 每个判定表达式的每个条件 的可能取值都至少满足一次
判定-条件覆盖 decision-condition coverage
使得程序中每个判定表达式的结果的可能取值都至少满足一次
并且使得程序中 每个判定表达式的每个条件 的可能取值都至少满足一次
多重条件覆盖 multiple condition coverage
多重条件覆盖实现了对每个条件组合的覆盖,不仅覆盖了所有条件的真假、判定的真假,还有不同条件的组合
但是测试覆盖率高,测试效率低
修正的条件判定覆盖 modified condition/decision coverage
要让每个判定的所有分支执行一次(判定覆盖)
每个条件的可能结果要执行一次(条件覆盖)
每个判定中每个条件必须能独立影响一个判定的输出