Mockito控制输出根据输入返回

时间:2016-10-10 15:32:45

标签: java mockito

我有问题,当我使用Java parallelStream而不是流时,我的测试失败。发生这种情况是因为我以严格的顺序返回Mock对象,而不是根据输入控制返回的Mock对象。

以下是我当前用于返回mocks对象的代码:

when(myOperation.getSomething(any(String.class)))
    .thenAnswer(AdditionalAnswers.returnsElementsOf(aListOfThings)));

如何根据我传递给“getSomething”的参数简洁地控制返回值?

2 个答案:

答案 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));
}