Mockito wanneer / dan kookboek

1. Overzicht

Dit kookboek laat zien hoe je Mockito gebruikt om gedrag te configureren in een verscheidenheid aan voorbeelden en use-cases.

De formaat van het kookboek is voorbeeldgericht en praktisch - geen externe details en uitleg nodig.

En als je meer wilt weten over goed testen met Mockito, bekijk dan hier de andere Mockito-artikelen.

We zullen zijn een simpele lijst bespotten implementatie - dezelfde implementatie die we in het vorige kookboek hebben gebruikt:

openbare klasse MyList breidt AbstractList uit {@Override public String get (final int index) {return null; } @Override public int size () {return 1; }} 

2. Kookboek

configureer eenvoudig retourgedrag voor mock

MyList listMock = Mockito.mock (MyList.class); when (listMock.add (anyString ())). thenReturn (false); boolean toegevoegd = listMock.add (randomAlphabetic (6)); assertThat (toegevoegd, is (false));

configureer retourgedrag voor mock op een alternatieve manier

MyList listMock = Mockito.mock (MyList.class); doReturn (false) .when (listMock) .add (anyString ()); boolean toegevoegd = listMock.add (randomAlphabetic (6)); assertThat (toegevoegd, is (false));

configureer mock om een ​​uitzondering te genereren voor een methodeaanroep

@Test (verwacht = IllegalStateException.class) openbare ongeldige gegevenMethodIsConfiguredToThrowException_whenCallingMethod_thenExceptionIsThrown () {MyList listMock = Mockito.mock (MyList.class); when (listMock.add (anyString ())). thenThrow (IllegalStateException.class); listMock.add (randomAlphabetic (6)); }

configureer het gedrag van een methode met ongeldig retourtype - om een ​​uitzondering te genereren

MyList listMock = Mockito.mock (MyList.class); doThrow (NullPointerException.class) .when (listMock) .clear (); listMock.clear ();

configureer het gedrag van meerdere oproepen

MyList listMock = Mockito.mock (MyList.class); when (listMock.add (anyString ())) .thenReturn (false) .thenThrow (IllegalStateException.class); listMock.add (randomAlphabetic (6)); listMock.add (randomAlphabetic (6)); // genereert de uitzondering

configureer het gedrag van een spion

MyList-instantie = nieuwe MyList (); MyList spy = Mockito.spy (instantie); doThrow (NullPointerException.class) .when (spy) .size (); spy.size (); // genereert de uitzondering

configureer methode om de echte, onderliggende methode op een mock

MyList listMock = Mockito.mock (MyList.class); wanneer (listMock.size ()). thenCallRealMethod (); assertThat (listMock.size (), equalTo (1));

configureer nepmethode-oproep met aangepast antwoord

MyList listMock = Mockito.mock (MyList.class); doAnswer (aanroep -> "Altijd hetzelfde"). when (listMock) .get (anyInt ()); String element = listMock.get (1); assertThat (element, is (equalTo ("Altijd hetzelfde")));

3. Conclusie

Dit formaat is een experiment - ik publiceer een aantal van mijn kookboeken voor interne ontwikkeling over een bepaald onderwerp - op Google Guava, Hamcrest en nu Mockito. Het doel is om deze informatie direct online beschikbaar te hebben - en om er iets aan toe te voegen wanneer ik een nieuw bruikbaar voorbeeld tegenkom.

De implementatie van al deze voorbeelden en codefragmenten is te vinden op GitHub - dit is een op Maven gebaseerd project, dus het zou gemakkelijk moeten kunnen worden geïmporteerd en uitgevoerd zoals het is.