Ich verwende Mockito für den Dienst später Unit-Tests. Ich bin verwirrt, wenn doAnswer
vs thenReturn
zu verwenden.Mockito: doAnswer Vs thenReturn
Kann mir jemand im Detail helfen? Bisher habe ich es mit thenReturn
probiert.
Ich verwende Mockito für den Dienst später Unit-Tests. Ich bin verwirrt, wenn doAnswer
vs thenReturn
zu verwenden.Mockito: doAnswer Vs thenReturn
Kann mir jemand im Detail helfen? Bisher habe ich es mit thenReturn
probiert.
Sie sollten thenReturn
oder doReturn
verwenden, wenn Sie den Rückgabewert zu dem Zeitpunkt kennen, zu dem Sie einen Methodenaufruf vortäuschen. Dieser definierte Wert wird zurückgegeben, wenn Sie die Mock-Methode aufrufen.
thenReturn(T value)
Legt einen Rückgabewert fest, der beim Aufruf der Methode zurückgegeben wird.
@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
wird verwendet, wenn Sie zusätzliche Aktionen tun müssen, wenn eine verspottet Methode aufgerufen wird, z.B. wenn Sie den Rückgabewert basierend auf den Parametern dieses Methodenaufrufs berechnen müssen.
Verwenden
doAnswer()
, wenn Sie einen void-Methode mit generischenAnswer
Stub wollen.Antwort gibt eine Aktion, und einen Rückgabewert ausgeführt wird, der zurückgegeben wird, wenn Sie mit dem Modell interagieren.
@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");
}
Dank @schlauergerd. Jetzt habe ich verstanden. –
hallo @Roland Weisleder, aber manchmal sollten Sie einen Wert erzeugt inneren Code und nichts zurückgeben mit Argumenten zu tun, zum Beispiel 'Code = UUID.randomUUID()', fand ich unmöglich, dies mit 'mockito' zu implementieren. – zhuguowei
Wenn Ihr Mock für jeden Aufruf eine neue UUID zurückgeben soll, implementieren Sie die 'Answer' nur mit' return UUID.randomUUID(); '. –