1. Panoramica
Questo libro di cucina mostra come utilizzare Mockito per configurare il comportamento in una varietà di esempi e casi d'uso.
Il formato del ricettario è incentrato sull'esempio e pratico, non sono necessari dettagli e spiegazioni estranee.
E, naturalmente, se vuoi saperne di più su come testare bene con Mockito, dai un'occhiata agli altri articoli di Mockito qui.
Prenderemo in giro una semplice implementazione dell'elenco , la stessa implementazione che abbiamo usato nel libro di cucina precedente:
public class MyList extends AbstractList { @Override public String get(final int index) { return null; } @Override public int size() { return 1; } }
2. Ricettario
configurare il comportamento di ritorno semplice per mock
MyList listMock = Mockito.mock(MyList.class); when(listMock.add(anyString())).thenReturn(false); boolean added = listMock.add(randomAlphabetic(6)); assertThat(added, is(false));
configurare il comportamento di ritorno per il mock in un modo alternativo
MyList listMock = Mockito.mock(MyList.class); doReturn(false).when(listMock).add(anyString()); boolean added = listMock.add(randomAlphabetic(6)); assertThat(added, is(false));
configure mock per generare un'eccezione su una chiamata al metodo
@Test(expected = IllegalStateException.class) public void givenMethodIsConfiguredToThrowException_whenCallingMethod_thenExceptionIsThrown() { MyList listMock = Mockito.mock(MyList.class); when(listMock.add(anyString())).thenThrow(IllegalStateException.class); listMock.add(randomAlphabetic(6)); }
configurare il comportamento di un metodo con tipo restituito void - per generare un'eccezione
MyList listMock = Mockito.mock(MyList.class); doThrow(NullPointerException.class).when(listMock).clear(); listMock.clear();
configurare il comportamento di più chiamate
MyList listMock = Mockito.mock(MyList.class); when(listMock.add(anyString())) .thenReturn(false) .thenThrow(IllegalStateException.class); listMock.add(randomAlphabetic(6)); listMock.add(randomAlphabetic(6)); // will throw the exception
configurare il comportamento di una spia
MyList instance = new MyList(); MyList spy = Mockito.spy(instance); doThrow(NullPointerException.class).when(spy).size(); spy.size(); // will throw the exception
configure metodo per chiamare il vero metodo sottostante su un mock
MyList listMock = Mockito.mock(MyList.class); when(listMock.size()).thenCallRealMethod(); assertThat(listMock.size(), equalTo(1));
configurare la chiamata al metodo fittizio con risposta personalizzata
MyList listMock = Mockito.mock(MyList.class); doAnswer(invocation -> "Always the same").when(listMock).get(anyInt()); String element = listMock.get(1); assertThat(element, is(equalTo("Always the same")));
3. Conclusione
Questo formato è un esperimento - sto pubblicando alcuni dei miei libri di cucina di sviluppo interno su un determinato argomento - su Google Guava, Hamcrest e ora Mockito . L'obiettivo è avere queste informazioni prontamente disponibili online e aggiungerle ogni volta che mi imbatto in un nuovo esempio utile.
L'implementazione di tutti questi esempi e frammenti di codice può essere trovata su GitHub : questo è un progetto basato su Maven, quindi dovrebbe essere facile da importare ed eseguire così com'è.