Java 使用Stream…peek()制作变量的测试方法
我已经建立了一个Mockito测试类来测试一个使用Java8流生成变量的方法。本质上,它是一组对象(Java 使用Stream…peek()制作变量的测试方法,java,junit,mockito,Java,Junit,Mockito,我已经建立了一个Mockito测试类来测试一个使用Java8流生成变量的方法。本质上,它是一组对象(currentTr),具有isDeleted属性。这是生成该变量的行 FPTR = Stream.of(currentTR) .peek(CMService::markAsDeleted) .collect(Collectors.toSet(); 正常运行时,运行正常。该集合中的对象被设置为已删除 问题是,当我运行测试用例时,该变量不包含任何设置为删除的对象(换句
currentTr
),具有isDeleted
属性。这是生成该变量的行
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()
来设置东西的原因是,要使模拟方法工作,必须返回一些东西。但是,也有一个“反向”API/语法来实现您想要的功能,例如:
doCallRealMethod().when(cmservice).markAsDeleted()
看。还有更多。最通用的是doAnswer()
方法 请阅读“如何创建一个应用程序”。然后使用链接改进您的问题(不要通过评论添加更多信息)。否则,我们无法回答您的问题并帮助您。不要给出50%的代码并解释其他代码应该做什么。如果你对代码的假设都是正确的,那就不会有问题了,对吧。所以:给我们一些足够完整的东西来重新处理这个问题!使用map
映射每个已删除的CMService
对象,然后将该结果收集到一个集合中,这比使用API的一部分要好得多,该API的一部分不打算由典型的消费者应用程序使用。