我有问题,当我使用Java parallelStream而不是流时,我的测试失败。发生这种情况是因为我以严格的顺序返回Mock对象,而不是根据输入控制返回的Mock对象。
以下是我当前用于返回mocks对象的代码:
when(myOperation.getSomething(any(String.class)))
.thenAnswer(AdditionalAnswers.returnsElementsOf(aListOfThings)));
如何根据我传递给“getSomething”的参数简洁地控制返回值?
答案 0 :(得分:3)
你可以这样做:
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
个实例,您需要根据需要进行调整
一些阅读:
答案 1 :(得分:2)
您可以只迭代您的值并为每个值设置特定的存根,而不是使用Answer。与答案不同,您必须能够预测您已经存根的所有值,但对于您的特定情况,这听起来可能不是问题。
for (int i = 0; i < aListOfThings.size(); i++) {
when(myOperation.getSomething(aListOfKeys.get(i)))
.thenReturn(aListOfThings.get(i));
}