Java Поток отсутствует ветвь покрытия кода - PullRequest
0 голосов
/ 11 февраля 2020

Далее Джакоко говорит, что все 4 ветви покрыты.

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

Однако для этого фрагмента и запуска того же набора тестов, Джакоко говорит, что 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);
}

1 Ответ

1 голос
/ 11 февраля 2020

Это потому, что 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 ветви для проверки.

...