[FIXED] Mockito-Stubbing – Gibt einen Wiederholungswert X-mal zurück

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, thenReturnerwartet 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)

0 Shares:
Leave a Reply

Your email address will not be published. Required fields are marked *

You May Also Like