我有问题,当我使用Java并行流而不是流我的测试失败。发生这种情况是因为我以严格的顺序返回Mock对象,而不是根据输入控制返回的Mock对象。
下面是我当前用来返回模拟对象的代码:
when(myOperation.getSomething(any(String.class)))
.thenAnswer(AdditionalAnswers.returnsElementsOf(aListOfThings)));
我如何能够简洁地控制返回值基于我传递给"getSomething"的参数?
你可以这样做:
when(myOperation.getSomething(any(String.class))).thenAnswer(new Answer<SomeThing>() {
@Override
public SomeThing answer(final InvocationOnMock invocation) throws Throwable {
// HERE ====> use invocation.getArguments()
return new SomeThing();
}
});
这里的答案返回一个SomeThing
实例,您将需要调整到您的需要
一些阅读:
- Java 8自定义应答支持 <
- doAnswer文档/gh>
-
InvocationOnMock
javadoc
不使用Answer,您只需遍历您的值并为每个值设置特定的存根。与Answer不同,您必须能够预测所有值,但对于您的特殊情况,这听起来可能不是问题。
for (int i = 0; i < aListOfThings.size(); i++) {
when(myOperation.getSomething(aListOfKeys.get(i)))
.thenReturn(aListOfThings.get(i));
}