Mockito:thenAnswer Vs然后返回

我正在使用Mockito进行unit testing。 我很困惑何时使用thenAnswer vs thenReturn

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

当您在模拟方法调用时知道返回值时,您应该使用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()当你想用一般的AnswerdoAnswer()一个void方法。

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"); }