Das Mockito-Javadoc scheint zu
erklären , warum in den seltenen Fällen, in denen Sie Mockito.when (Object) nicht verwenden können, doReturn () doReturn()
anstelle von when()
Use doReturn () verwendet wird.
Beachten Sie, dass Mockito.when (Object) immer zum Stubben empfohlen wird, da es argumenttypsicher und lesbarer ist (insbesondere beim Stubben aufeinanderfolgender Aufrufe).
Hier sind die seltenen Fälle, in denen doReturn () nützlich ist:
1. Wenn Sie echte Objekte ausspionieren und echte Methoden für einen Spion aufrufen, treten Nebenwirkungen auf
List list = new LinkedList(); List spy = spy(list);
// Unmöglich: Die echte Methode wird aufgerufen, daher löst spy.get (0) die IndexOutOfBoundsException aus (die Liste ist noch leer).
when(spy.get(0)).thenReturn("foo");
// Sie müssen doReturn () zum Stubben verwenden:
doReturn("foo").when(spy).get(0);
2. Überschreiben einer vorherigen Ausnahme-Stubbing:
when(mock.foo()).thenThrow(new RuntimeException());
// Unmöglich: Die ausnahme-stubbed foo () -Methode wird aufgerufen, sodass RuntimeException ausgelöst wird. when(mock.foo()).thenReturn("bar");
// Sie müssen doReturn () zum Stubben verwenden:
doReturn("bar").when(mock).foo();
Die obigen Szenarien zeigen einen Kompromiss zwischen Mockitos eleganter Syntax. Beachten Sie jedoch, dass die Szenarien sehr selten sind. Spionage sollte sporadisch sein und übergeordnetes Ausnehmen von Ausnahmen ist sehr selten. Ganz zu schweigen davon, dass das Überschreiben von Stubbing im Allgemeinen ein potenzieller Codegeruch ist, der auf zu viel Stubbing hinweist.
doReturn()
nützlich ist.