junit Java中嵌套条件循环的循环覆盖构造

zfciruhq  于 12个月前  发布在  Java
关注(0)|答案(2)|浏览(148)

我目前正在学习Java中的代码覆盖测试,特别是循环覆盖。从context开始,循环覆盖包括运行循环0,1和>1次。然而,我遇到了一个我试图测试的特定函数结构的问题。
结构如下:

function() {
    if(A){
        //do something here as well

        while(A){
            //do something
        }
    }
}

字符串
while循环嵌套在一个if语句中,这两个语句都有完全相同的条件A。这个结构似乎阻止我创建一个while循环执行零次的测试用例,因为如果A为假,封闭的if语句将阻止进入循环。
给定这个结构,我如何构造测试用例来为while循环提供循环覆盖(0,1,>1次迭代)?
编辑:如果这个问题不合适或者太愚蠢而无法回答,我很抱歉,请告诉我这个问题有什么问题,我下次不会再问类似的问题。

ttcibm8c

ttcibm8c1#

让我们假设你有一个语句(或几个语句)在循环中改变A的值,否则,一旦进入,它将是一个无限循环。
其中两种情况很简单:
对于1,您需要一个A的值,即true,以及一些使A在第一次迭代中变为false的附加条件。
对于>1,需要一个A的值,即true,以及一些附加条件,以确保A在循环的第一次迭代中仍然是true,但可能在一段时间后变为false
对于0的覆盖,从循环条件被求值但从未输入的意义上说,你有一个问题。假设if下的“这里也做点什么”没有改变A的值,那么根本没有办法求值循环条件但不输入它。这种情况将要求Afalse,但如果是的话,循环根本就不会到达

klh5stk1

klh5stk12#

使用面向对象的设计(Object Oriented Design)。

boolean A() {
    return System.currentTimeMillis() % 2 == 0;
}

@Test
void B() {
    //do something here as well
}

@Test
void C() {
    //do something
}

void f() {
    if (A()) {
        B();
        while (A()) {
            C();
        }
    }
}

字符串

相关问题