【问题标题】:Why is Jacoco flagging my for loop as partially covered?为什么 Jacoco 将我的 for 循环标记为部分覆盖?
【发布时间】:2019-09-18 18:59:41
【问题描述】:

在一个带有 for 循环和 if 语句的简单方法中,Jacoco 将 for 循环标记为部分覆盖。为什么是这样?

这个问题似乎相关,但我不知道如何将其应用于我的情况:https://github.com/jacoco/jacoco/issues/370

我怀疑这与单独的“if”语句有关。

MRE:

   public SomeClass test(){
        SomeClass find = new SomeClass();

        ArrayList <String> myArrayList = new ArrayList<>();
        myArrayList.add("A");
        myArrayList.add("B");

        for(String s : myArrayList){
            if(s.equals("B")){break;}
        }

        return find;
    }

相应的测试:

@Test
    public void testTest(){
        SomeClass find = new SomeClass();
        find.test();
    }

示例代码将显示带有“for”循环的行被部分覆盖,而其他所有行都被覆盖。我希望它能够将每一行都显示为所涵盖的内容。

【问题讨论】:

  • 可能是因为您没有测试找不到值并且 for 循环完成的场景。 foreach 循环只是带有迭代器和测试iter.hasNext(); 的for 循环的语法糖。在您的测试用例中,您只会看到返回 true 的情况。
  • 就是这样!我从未测试过循环完成的条件。谢谢你。如果您发布答案,我会接受。

标签: java unit-testing testing jacoco test-coverage


【解决方案1】:

可能是因为您没有测试找不到值并且 for 循环完成的场景。 foreach 循环只是带有迭代器和测试iter.hasNext(); 的for 循环的语法糖。在您的测试用例中,您只会看到返回 true 的情况。

【讨论】:

    猜你喜欢
    • 2017-11-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-24
    • 1970-01-01
    相关资源
    最近更新 更多