使用Stream ... peek()进行变量测试的方法

时间:2019-01-23 19:45:27

标签: java junit mockito

我已经建立了一个Mockito测试类来测试使用Java 8 Streams生成变量的方法。本质上,它是具有currentTr属性的对象(isDeleted)的集合。这是生成该变量的行。

FPTR = Stream.of(currentTR)
        .peek(CMService::markAsDeleted)
        .collect(Collectors.toSet();

正常运行时,它运行正常。该集合中的对象设置为已删除。

问题是,当我运行测试用例时,此变量不包含任何要删除的对象(换句话说,似乎peek()或指定的方法(markAsDeleted)是从来没有打电话来。)

我曾经考虑过使用when().thenCallRealMethod(),但是考虑到markAsDeleted是一个无效方法,我遇到了一个错误,它也不允许我这样做。错误提示:

when(cmservice.markAsDeleted(anyObject())).thenCallRealMethod();

java:此处不允许使用“空”类型

我已经在测试字段中模拟了CMService,例如:

@Mock
CMService cmservice;

是否有一种方法可以触发.peek()中的方法调用,以便我完全获得正确的变量,或者这是设置问题?

1 个答案:

答案 0 :(得分:1)

之所以不能使用when()来设置事物,是因为要使其正常工作,模拟方法必须返回一些信息。但是,也可以使用“反向” API /语法来执行所需的操作,例如:

doCallRealMethod().when(cmservice).markAsDeleted()

请参见the documentation。还有更多。最通用的是doAnswer()方法。