我已经设置了一个 Mockito 测试类来测试使用 Java 8 Streams 生成变量的方法。本质上,它是一个具有isDeleted
属性的对象(currentTr
)的集合。这是生成该变量的行。
FPTR = Stream.of(currentTR)
.peek(CMService::markAsDeleted)
.collect(Collectors.toSet();
正常运行时,它运行良好。该集合中的对象设置为已删除。
问题是当我运行测试用例时,此变量不包含任何设置为删除的对象(换句话说,似乎从未调用peek()
或指定的方法(markAsDeleted
)。
我想过使用 when().thenCallRealMethod()
但是,鉴于markAsDeleted
是一种无效方法,我收到一个错误,也不允许我这样做。错误是:
when(cmservice.markAsDeleted(anyObject())).thenCallRealMethod();
Java:"此处不允许使用void"类型
我在测试领域模拟了CMService:
@Mock
CMService cmservice;
有没有办法在.peek()
中触发方法调用,以便我得到正确的变量,还是设置问题?
你不能使用when()
来设置东西的原因是,要使它工作,mocked 方法必须返回一些东西。但是,还有一个"反向"API/语法可以执行您想要的操作,例如:
doCallRealMethod().when(cmservice).markAsDeleted()
请参阅文档。还有更多。最通用的是doAnswer()
方法。