[英]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.