Ausgabe
Ich weiß, dass durch das Erstellen eines Stubs in Mockito aufeinanderfolgende Werte von einem Mock wie folgt zurückgegeben werden können:
when(mockedObject.doSomething()).thenReturn(1, 1, 1, 1, 5);
oder
when(mockedObject.doSomething()).thenReturn(1).thenReturn(1).thenReturn(1).thenReturn(1).thenReturn(5);
Ist es möglich, eine Wiederholungsnummer für einen bestimmten Rückgabewert anzugeben? Etwas wie das:
when(mockedObject.doSomething()).thenReturn(1, times(4)).thenReturn(5);
Lösung
Sie können eine Schleife verwenden:
class Mockme {
@Test
void test() {
final UnderTest mock = Mockito.mock(UnderTest.class);
OngoingStubbing<Integer> stubbing = Mockito.when(mock.get());
for (int i = 0; i < 4; i++) {
stubbing = stubbing.thenReturn(1);
}
stubbing.thenReturn(5, 7, 10);
for (int i = 0; i < 10; i++) {
System.out.println(mock.get());
}
}
}
interface UnderTest {
int get();
}
Oder ein vorberechnetes Array, thenReturn
erwartet aber den ersten Rückgabewert als separates Argument, sodass dies schwierig zu warten ist:
@Test
void test() {
final Integer[] returns = new Integer[6];
Arrays.fill(returns, 1);
returns[3] = 5;
returns[4] = 7;
returns[5] = 10;
final UnderTest mock = Mockito.mock(UnderTest.class);
Mockito.when(mock.get()).thenReturn(1, returns);
for (int i = 0; i < 10; i++) {
System.out.println(mock.get());
}
}
Beantwortet von – knittl
Antwort geprüft von – Terry (FixError Volunteer)