Spottende undtagelse At kaste ved hjælp af Mockito

1. Oversigt

I denne hurtige vejledning - fokuserer vi på, hvordan man konfigurerer et metodekald til at kaste en undtagelse med Mockito.

For mere information om biblioteket, se også vores Mockito-serie.

Her er en simpel ordbogsklasse, vi bruger i disse eksempler:

klasse MyDictionary {private Map wordMap = ny HashMap (); public void add (String word, String meaning) {wordMap.put (word, meaning); } offentlig String getMeaning (String word) {return wordMap.get (word); }}

2. Ikke-Ugyldig Returtype

For det første, hvis vores metode for returret ikke er ugyldig vi kan bruge når (). derefter Kast ():

@Test (forventet = NullPointerException.class) offentlig ugyldig nårConfigNonVoidRetunMethodToThrowEx_thenExIsThrown () {MyDictionary dictMock = mock (MyDictionary.class); når (dictMock.getMeaning (anyString ())). derefterThrow (NullPointerException.class); dictMock.getMeaning ("ord"); } 

Bemærk, vi konfigurerede getMeaning () metode - som returnerer en værdi af typen Snor - at smide en NullPointerException når kaldet.

3. Ugyldig Returtype

Nu, hvis vores metode vender tilbage ugyldig, vi bruger doTrow ():

@Test (forventet = IllegalStateException.class) offentlig ugyldig nårConfigVoidRetunMethodToThrowEx_thenExIsThrown () {MyDictionary dictMock = mock (MyDictionary.class); doThrow (IllegalStateException.class) .when (dictMock) .add (anyString (), anyString ()); dictMock.add ("word", "meaning"); }

Her konfigurerede vi en tilføje() metode - som vender tilbage ugyldig - at kaste IllegalStateException når kaldet.

Vi kan ikke bruge det når (). derefter Kast () med ugyldig returtype, da kompilatoren ikke tillader det ugyldig metoder inden for parenteser.

4. Undtagelse som objekt

Om konfiguration af selve undtagelsen kan vi passere undtagelsens klasse som i vores tidligere eksempler eller som et objekt:

@Test (forventet = NullPointerException.class) offentlig ugyldig nårConfigNonVoidRetunMethodToThrowExWithNewExObj_thenExIsThrown () {MyDictionary dictMock = mock (MyDictionary.class); når (dictMock.getMeaning (anyString ())). derefterThrow (ny NullPointerException ("Der opstod en fejl")); dictMock.getMeaning ("ord"); }

Og vi kan gøre det samme med doTrow () såvel:

@Test (forventet = IllegalStateException.class) offentlig ugyldig nårConfigVoidRetunMethodToThrowExWithNewExObj_thenExIsThrown () {MyDictionary dictMock = mock (MyDictionary.class); doThrow (ny IllegalStateException ("Fejl opstod")). når (dictMock). tilføj (anyString (), anyString ()); dictMock.add ("word", "meaning"); }

5. Spy

Vi kan også konfigurere Spion at kaste en undtagelse på samme måde som vi gjorde med mocken:

@Test (forventet = NullPointerException.class) offentlig ugyldighed givenSpy_whenConfigNonVoidRetunMethodToThrowEx_thenExIsThrown () {MyDictionary dict = new MyDictionary (); MyDictionary spion = Mockito.spy (dict); når (spy.getMeaning (anyString ())) .thenThrow (NullPointerException.class); spy.getMeaning ("ord"); }

6. Konklusion

I denne artikel undersøgte vi, hvordan man konfigurerer metodeopkald til at kaste en undtagelse i Mockito.

Som altid kan den fulde kildekode findes på GitHub.