Podrugljivo bacanje izuzetaka pomoću Mockita
1. Pregled
U ovom brzom vodiču - usredotočit ćemo se na to kako konfigurirati poziv metode kako bi se dodala iznimka s Mockitom.
Za više informacija o knjižnici pogledajte i našu Mockito seriju.
Evo jednostavne klase rječnika koju ćemo koristiti u ovim primjerima:
klasa MyDictionary {privatna karta wordMap = new HashMap (); javna praznina dodaj (Riječ u nizu, značenje niza) {wordMap.put (riječ, značenje); } javni String getMeaning (niz riječi) {return wordMap.get (riječ); }}
2. Ne-Poništiti Tip povrata
Prvo, ako naša metoda povratne vrste nije poništiti možemo koristiti when (). thenThrow ():
@Test (očekuje se = NullPointerException.class) javna praznina kadaConfigNonVoidRetunMethodToThrowEx_thenExIsThrown () {MyDictionary dictMock = lažno (MyDictionary.class); kada (dictMock.getMeaning (anyString ())). thenThrow (NullPointerException.class); dictMock.getMeaning ("riječ"); }
Obavijest, konfigurirali smo getMeaning () metoda - koja vraća vrijednost tipa Niz - baciti a NullPointerException kad je pozvan.
3. Poništiti Tip povrata
Ako se naša metoda vrati poništiti, koristit ćemo doThrow ():
@Test (očekuje se = IllegalStateException.class) javna praznina kadaConfigVoidRetunMethodToThrowEx_thenExIsThrown () {MyDictionary dictMock = lažna (MyDictionary.class); doThrow (IllegalStateException.class) .when (dictMock) .add (anyString (), anyString ()); dictMock.add ("riječ", "značenje"); }
Ovdje smo konfigurirali dodati() metoda - koja se vraća poništiti - baciti IllegalStateException kad je pozvan.
Ne možemo koristiti when (). thenThrow () s poništiti tip povratka jer kompajler ne dopušta poništiti metode unutar zagrada.
4. Iznimka kao objekt
O konfiguriranju same iznimke, možemo proslijediti klasu iznimke kao u našim prethodnim primjerima ili kao objekt:
@Test (očekuje se = NullPointerException.class) javna praznina kadaConfigNonVoidRetunMethodToThrowExWithNewExObj_thenExIsThrown () {MyDictionary dictMock = lažno (MyDictionary.class); kada (dictMock.getMeaning (anyString ())). thenThrow (novi NullPointerException ("Dogodila se pogreška")); dictMock.getMeaning ("riječ"); }
A možemo i s doThrow () također:
@Test (očekuje se = IllegalStateException.class) javna praznina kadaConfigVoidRetunMethodToThrowExWithNewExObj_thenExIsThrown () {MyDictionary dictMock = lažna (MyDictionary.class); doThrow (novi IllegalStateException ("Dogodila se pogreška")) .when (dictMock) .add (anyString (), anyString ()); dictMock.add ("riječ", "značenje"); }
5. Špijun
Također možemo konfigurirati Špijun da izbacimo izuzetak na isti način kao što smo to učinili s lažnim:
@Test (očekuje se = NullPointerException.class) javna praznina givenSpy_whenConfigNonVoidRetunMethodToThrowEx_thenExIsThrown () {MyDictionary dict = new MyDictionary (); MyDictionary špijun = Mockito.spy (dict); when (spy.getMeaning (anyString ())). thenThrow (NullPointerException.class); spy.getMeaning ("riječ"); }
6. Zaključak
U ovom smo članku istražili kako konfigurirati pozive metoda za dodavanje iznimke u Mockito.
Kao i uvijek, puni izvorni kod možete pronaći na GitHubu.