繁体   English   中英

Java Stream 缺少代码覆盖分支

[英]Java Stream missing a code coverage branch

对于以下内容,Jacoco 表示涵盖了所有 4 个分支。

list.stream()
  .forEach(item -> item.type.equals("Good") && item.expired == false);

然而,对于这个片段,并运行相同的测试集,Jacoco 说缺少 1 个分支。

list.stream()
  .filter(item -> item.type.equals("Good") && item.expired == false)
  .findFirst()
  .get()

怎么会这样?

psuedocode:
public void testA() {
  // new Item(item type, is expired)
  item1 = new Item("Good", false);
  item1 = new Item("Good", true);
  item1 = new Item("Electricity", false);
  item1 = new item("Water", true);

  Item result = service.methodToTest(item1, item2, item3, item4);

  assertThat(result).isEqualTo(item1);
}

这是因为此代码段中的forEach为每个元素调用(尽管它不执行任何操作 - 它生成一个boolean并忘记它):

list.stream()
  .forEach(item -> item.type.equals("Good") && item.expired == false);

而在以下代码段中,您通过谓词过滤元素:

list.stream()
  .filter(item -> item.type.equals("Good") && item.expired == false)
  .findFirst()
  .get()

您需要检查,过滤掉不满足谓词的元素,反之亦然。 这样你有 2 个分支要检查。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM