测试我的代码时,遇到了我无法解释的事情。用eclemma
检查代码覆盖率,我发现一个for-loop
的标头,该标头以黄色突出显示,消息显示为"1 of 2 branches missing"
。
代码行如下:
for (int i = maxIdx; i >= 0; i--) {
该循环的主体以及前面和后面的语句都被突出显示(并被实际执行),并且该方法在所有可能的条件下都可以正常工作。据我所知,其他for-loops
的标头仅在循环主体从未执行过的情况下以黄色突出显示,并带有相同的消息。
此消息的含义是什么?缺少哪个分支?
答案 0 :(得分:1)
我猜测缺少的分支是指条件i >= 0
。由于i
是用正数maxIdx
初始化的(根据注释),因此您可能还应该为maxIdx
中的0
和负数maxIdx
添加测试用例
请注意,由于maxIdx
是StringBuilder
的长度(根据评论),因此这可能是不可能的,您必须忍受丢失的分支,或者“人为地”,以重构代码,以便您可以传递否定的maxIdx
。
答案 1 :(得分:1)
这是for
形式的循环
for (ForInit; ForCondition; ForUpdate)
Body
已执行:
ForInit
被执行ForCondition
被评估
false
时,Body
不执行,并且循环后继续执行true
之后执行Body
,执行ForUpdate
并从步骤2开始继续执行“ 2个分支”对应于ForCondition
的以上两个选项。
“缺少2个分支中的1个”表示仅发生了其中一个选项,即第一个或第二个。
在缺少 complete example 的情况下(包括您的循环正文),很难回答您的其他问题
但是很奇怪-为什么其他总是至少执行一次的循环却是绿色的?
但这很奇怪-为什么其他循环总是绿色?
但是,假设执行了循环的Body
,则在Body
评估为ForCondition
之前,false
中的循环可能退出了。
例如,使用EclEmma 3.1.1随附的Eclipse IDE for Java的最新版本2018-12:
也许其他循环中没有这样的出口:
这也可以解释
以空的
StringBuilder
运行此代码会将其涂成绿色。
和
添加带有空
StringBuilder
的人为创建的情境(实际上是不可能的),将循环显示为绿色。
由于在执行ForCondition
之前false
的值为Body
时会增加大小写: