使模拟方法返回传递给它的参数

新手上路,请多包涵

考虑一个方法签名,例如:

 public String myFunction(String abc);

Mockito 能否帮助返回方法收到的相同字符串?

原文由 Abhijeet Kashnia 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 366
2 个回答

自 Mockito 1.9.5+ 和 Java 8+

您可以使用 lambda 表达式,例如:

 when(myMock.myFunction(anyString())).thenAnswer(i -> i.getArguments()[0]);

其中 iInvocationOnMock 的实例。

对于旧版本

您可以在 Mockito 中创建一个答案。假设我们有一个名为 MyInterface 的接口,其方法为 myFunction。

 public interface MyInterface {
    public String myFunction(String abc);
}

这是带有 Mockito 答案的测试方法:

 public void testMyFunction() throws Exception {
    MyInterface mock = mock(MyInterface.class);
    when(mock.myFunction(anyString())).thenAnswer(new Answer<String>() {
    @Override
    public String answer(InvocationOnMock invocation) throws Throwable {
        Object[] args = invocation.getArguments();
        return (String) args[0];
    }
    });

    assertEquals("someString",mock.myFunction("someString"));
    assertEquals("anotherString",mock.myFunction("anotherString"));
}

原文由 Steve 发布,翻译遵循 CC BY-SA 4.0 许可协议

如果你有 Mockito 1.9.5 或更高版本,有一个新的静态方法可以为你创建 Answer 对象。你需要写类似的东西

import static org.mockito.Mockito.when;
import static org.mockito.AdditionalAnswers.returnsFirstArg;

when(myMock.myFunction(anyString())).then(returnsFirstArg());

或者

doAnswer(returnsFirstArg()).when(myMock).myFunction(anyString());

请注意, returnsFirstArg() 方法在 AdditionalAnswers 类中是静态的,这是Mockito 1.9.5的新功能;所以你需要正确的静态导入。

原文由 Dawood ibn Kareem 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题