如何对Java 8流进行单元测试?

时间:2018-06-13 10:51:03

标签: java unit-testing testing java-stream

list.stream().forEach(e -> { dbCall.delete(e.Id());});

列表中的每个项目都将从数据库中删除。

假设列表中有3个项目,如何进行单元测试:

  1. 删除了3次。
  2. 删除被称为'顺序/顺序',即列表中的元素序列?

2 个答案:

答案 0 :(得分:2)

您可以使用JUnit' InOrder

DbCall dbCall = mock(DbCall.class);
List<Element> list = Arrays.asList(newElement(1), newElement(2), newElement(3));

runDeleteMethod(list);

InOrder inorder = inOrder(dbCall);
inorder.verify(dbCall).delete(1);
inorder.verify(dbCall).delete(2);
inorder.verify(dbCall).delete(3);

答案 1 :(得分:1)

只需验证应调用的预期时间dbCall.delete()。 这看起来像这样:

Mockito.verify(dbCall, times(3L)).delete(any(String.class));

Streams可以并行工作,因此无法验证序列。您可以使用索引上的verify元素执行此操作,但序列将被忽略。 Mockito将验证使用的呼叫+值。这需要进行单元测试。