Mockito:thenAnswer Vs然后返回
我正在使用Mockito进行unit testing。 我很困惑何时使用thenAnswer
vs thenReturn
。
任何人都可以帮助我详细? 到目前为止,我已经尝试过,然后thenReturn
。
当您在模拟方法调用时知道返回值时,您应该使用thenReturn
或doReturn
。 当您调用模拟方法时,返回此定义的值。
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
来doAnswer()
一个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"); }