提问人:Kenny Ynnek 提问时间:11/16/2023 最后编辑:Kenny Ynnek 更新时间:11/18/2023 访问量:57
在 Java 中构造嵌套条件循环的循环覆盖率
Constructing loop coverage for nested conditional loops in Java
问:
我目前正在学习 Java 中的代码覆盖率测试,特别是循环覆盖率。从上下文来看,循环覆盖涉及运行循环 0、1 和 >1 次。但是,我遇到了我正在尝试测试的特定函数结构的问题。
结构如下:
function() {
if(A){
//do something here as well
while(A){
//do something
}
}
}
while 循环嵌套在 if 语句中,两者具有完全相同的条件 A。这种结构似乎阻止我创建一个测试用例,其中 while 循环将执行零次,因为如果 A 为 false,封闭的 if 语句将阻止进入循环。
鉴于这种结构,如何构建为 while 循环提供循环覆盖率(0、1、>1 次迭代)的测试用例?
编辑:很抱歉,如果问题不合适或太愚蠢而无法回答,请告诉我这个问题有什么问题,下次我不会问类似的问题。
答:
1赞
Mureinik
11/16/2023
#1
假设你有一个语句(或几个语句)改变了循环内部的值,否则,一旦输入,它将是一个无限循环。A
其中两种情况很简单:
对于 ,您需要一个值 that's ,以及一些导致在第一次迭代中成为的附加条件。
对于 ,您需要一个值 that's ,以及一些额外的条件,以确保在循环的第一次迭代中保留,但可能在一段时间后成为。1
A
true
A
false
>1
A
true
A
true
false
对于 的覆盖率,在评估循环条件但从未输入的意义上,您就有问题了。假设 下的 “do something here as well” does not change of 的值,则根本无法评估循环条件而不输入它。这种情况需要 ,但如果是,甚至无法到达循环。0
if
A
A
false
0赞
Reilas
11/17/2023
#2
利用面向对象的设计。
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();
}
}
}
评论