Eclemma:在for循环中遗漏了分支-这是什么意思?

时间:2018-12-28 13:51:07

标签: java for-loop code-coverage eclemma

测试我的代码时,遇到了我无法解释的事情。用eclemma检查代码覆盖率,我发现一个for-loop的标头,该标头以黄色突出显示,消息显示为"1 of 2 branches missing"

代码行如下:

    for (int i = maxIdx; i >= 0; i--) {

该循环的主体以及前面和后面的语句都被突出显示(并被实际执行),并且该方法在所有可能的条件下都可以正常工作。据我所知,其他for-loops的标头仅在循环主体从未执行过的情况下以黄色突出显示,并带有相同的消息。

此消息的含义是什么?缺少哪个分支?

2 个答案:

答案 0 :(得分:1)

我猜测缺少的分支是指条件i >= 0。由于i是用正数maxIdx初始化的(根据注释),因此您可能还应该为maxIdx中的0和负数maxIdx添加测试用例

请注意,由于maxIdxStringBuilder的长度(根据评论),因此这可能是不可能的,您必须忍受丢失的分支,或者“人为地”,以重构代码,以便您可以传递否定的maxIdx

答案 1 :(得分:1)

这是for形式的循环

for (ForInit; ForCondition; ForUpdate)
  Body

已执行:

  1. ForInit被执行
  2. 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:

example

也许其他循环中没有这样的出口:

example

这也可以解释

  

以空的StringBuilder运行此代码会将其涂成绿色。

  

添加带有空StringBuilder的人为创建的情境(实际上是不可能的),将循环显示为绿色。

由于在执行ForCondition之前false的值为Body时会增加大小写:

example