Java 使用Stream…peek()制作变量的测试方法

Java 使用Stream…peek()制作变量的测试方法,java,junit,mockito,Java,Junit,Mockito,我已经建立了一个Mockito测试类来测试一个使用Java8流生成变量的方法。本质上,它是一组对象(currentTr),具有isDeleted属性。这是生成该变量的行 FPTR = Stream.of(currentTR) .peek(CMService::markAsDeleted) .collect(Collectors.toSet(); 正常运行时,运行正常。该集合中的对象被设置为已删除 问题是,当我运行测试用例时,该变量不包含任何设置为删除的对象(换句

我已经建立了一个Mockito测试类来测试一个使用Java8流生成变量的方法。本质上,它是一组对象(
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的一部分不打算由典型的消费者应用程序使用。