java - Eclemma:for 循环中缺少分支——这是什么意思?

标签 java for-loop code-coverage eclemma

测试我的代码时我遇到了无法解释的事情。使用 eclemma 检查代码覆盖率我找到了 for-loop 的标题以黄色突出显示,消息内容为 "1 of 2 branches missing" .

代码行如下:

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

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

这则消息的意义是什么?缺少哪个分支?

最佳答案

方法如下for表单循环

for (ForInit; ForCondition; ForUpdate)
  Body

执行:

  1. ForInit已执行
  2. ForCondition被评估
    • false ,然后Body不执行,循环后继续执行
    • true ,然后Body被执行,ForUpdate被执行并从步骤 2 继续执行

“2个分支”对应ForCondition的上述两个选项.

“2 个分支中的 1 个缺失”意味着仅发生了这些选项之一,要么是第一个,要么是第二个。

<小时/>

没有 complete example 包括循环体,很难回答您的其他问题

But strange -- why then other loops that always executed at least once are green?

Yet it's rather strange -- why other loops are always green?

但是考虑到Body循环已执行,可能是 Body 中的循环退出之前ForCondition计算结果为 false .

例如,使用 EclEmma 3.1.1 附带的最新版 Eclipse IDE for Java 2018-12:

example

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

example

这也能解释

Running this code with an empty StringBuilder paints it green.

Adding an artificially created situation with an empty StringBuilder (that's impossible in reality) colors the loop in green.

因为添加了 ForCondition 时的情况计算结果为false在执行 Body 之前:

example

关于java - Eclemma:for 循环中缺少分支——这是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53959614/

相关文章:

java - spring框架在mvc中的作用

java - 无法在sqlite数据库查询(JAVA)中使用输入作为参数

java - 如何在 BottomSheetDialogFragment 中设置最大高度?

php - PHPunit 的 CodeCoverage 未生成

java - JSoup:从类标签中提取一个词

c - K&R 第一版,练习 1.18(for 语句中的测试很笨拙)

ios - 为 UITextField 创建一个通用的下一步按钮

python for循环只执行一次?

coffeescript - 使用 Karma、browserify 和 Coffeescript 测试覆盖率

unit-testing - 如何让 TFS 构建不测量第 3 方程序集的覆盖率