Mockito:doAnswer Vs thenReturn

新手上路,请多包涵

我正在使用 Mockito 进行服务以后的单元测试。我很困惑何时使用 doAnswerthenReturn

任何人都可以详细帮助我吗?到目前为止,我已经尝试过 thenReturn

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

阅读 1k
1 个回答

当您知道模拟方法调用时的返回值时,您应该使用 thenReturndoReturn 。当您调用模拟方法时,将返回此定义的值。

thenReturn(T value) 设置调用方法时要返回的返回值。

 @Test
public void test_return() throws Exception {
    Dummy dummy = mock(Dummy.class);
    int returnValue = 5;

    // choose your preferred way
    when(dummy.stringLength("dummy")).thenReturn(returnValue);
    doReturn(returnValue).when(dummy).stringLength("dummy");
}

Answer 当您需要在调用模拟方法时执行其他操作时使用,例如,当您需要根据此方法调用的参数计算返回值时。

使用 doAnswer() 当你想用通用 Answer 存根一个无效方法时。

Answer 指定执行的操作以及与模拟交互时返回的返回值。

 @Test
public void test_answer() throws Exception {
    Dummy dummy = mock(Dummy.class);
    Answer<Integer> answer = new Answer<Integer>() {
        public Integer answer(InvocationOnMock invocation) throws Throwable {
            String string = invocation.getArgumentAt(0, String.class);
            return string.length() * 2;
        }
    };

    // choose your preferred way
    when(dummy.stringLength("dummy")).thenAnswer(answer);
    doAnswer(answer).when(dummy).stringLength("dummy");
}

原文由 Roland Weisleder 发布,翻译遵循 CC BY-SA 3.0 许可协议

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