Mockito控制输出根据输入返回



我有问题,当我使用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));
}

相关内容

  • 没有找到相关文章

最新更新