单元测试

单元测试

例子

/**
 * @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;
    }
}

流程图

image-20210924200025539

语句覆盖 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);
    }

}

测试运行

image-20210924201543962

单元测试的好处,设计过测试脚本后,可以无限次反复执行。

回归测试 regression testing

指修改了旧代码后,重新进行测试,以确保修改没有引入新的错误或者导致其他代码发生错误。

判定覆盖 decision coverage

测试用例能够使得程序中每个判定表达式的值为true和为false的分支都至少执行一次测试

条件覆盖 condition coverage

使得程序中 每个判定表达式的每个条件 的可能取值都至少满足一次

判定-条件覆盖 decision-condition coverage

使得程序中每个判定表达式的结果的可能取值都至少满足一次

并且使得程序中 每个判定表达式的每个条件 的可能取值都至少满足一次

多重条件覆盖 multiple condition coverage

多重条件覆盖实现了对每个条件组合的覆盖,不仅覆盖了所有条件的真假、判定的真假,还有不同条件的组合

但是测试覆盖率高,测试效率低

修正的条件判定覆盖 modified condition/decision coverage

要让每个判定的所有分支执行一次(判定覆盖)

每个条件的可能结果要执行一次(条件覆盖)

每个判定中每个条件必须能独立影响一个判定的输出

posted @ 2021-09-24 20:43  lucky_doog  阅读(89)  评论(0编辑  收藏  举报