Tvrdite da je izuzetak bačen u JUnit 4 i 5

1. Uvod

U ovom ćemo brzom vodiču pogledati kako testirati je li izuzetak izbačen pomoću biblioteke JUnit.

Naravno, pobrinut ćemo se da pokrijemo i verzije JUnit 4 i JUnit 5.

2. JUNITET 5

JUnit 5 API za tvrdnje Jupitera uvodi assertThrows metoda za utvrđivanje iznimaka.

Ovo uzima vrstu očekivane iznimke i Izvršno funkcionalno sučelje gdje testirani kod možemo proslijediti kroz lambda izraz:

@Test public void whenExceptionThrown_thenAssertionSucceeds () {Izuzetak iznimka = assertThrows (NumberFormatException.class, () -> {Integer.parseInt ("1a");}); String očekujeMessage = "Za ulazni niz"; String actualMessage = iznimka.getMessage (); assertTrue (actualMessage.contains (očekuje seMessage)); }

Ako se baci očekivana iznimka,assertThrows vraća iznimku koja nam omogućuje da također potvrdimo poruku.

Nadalje, važno je to napomenuti ova je tvrdnja zadovoljena kada priloženi kod baci iznimku tipa NullPointerException ili bilo koji od njegovih izvedenih tipova.

To znači da ako prođemo Iznimka kao očekivana vrsta iznimke, svaka izbačena iznimka učinit će tvrdnju uspješnom od Iznimka je supertip za sve iznimke.

Ako promijenimo gornji test, očekujemo a RuntimeException, ovo će također proći:

@Test public void whenDerivedExceptionThrown_thenAssertionSucceds () {Izuzetak iznimka = assertThrows (RuntimeException.class, () -> {Integer.parseInt ("1a");}); String očekujeMessage = "Za ulazni niz"; String actualMessage = iznimka.getMessage (); assertTrue (actualMessage.contains (očekuje seMessage)); }

The assertThrows () metoda omogućuje precizniju kontrolu za logiku tvrdnji o iznimkama jer se možemo koristitito oko određenih dijelova koda.

3. JUNITET 4

Kada koristimo JUnit 4, možemo jednostavno koristiti očekivano atribut @Test bilješka izjaviti da očekujemo da će se izuzetak baciti bilo gdje u označenoj testnoj metodi.

Kao rezultat toga, kada se test pokrene, neće uspjeti ako navedena iznimka ne bude izbačena i proći će ako se izvrši:

@Test (očekuje se = NullPointerException.class) javna void kadaExceptionThrown_thenExpectationSatisfied () {String test = null; test.length (); }

U ovom smo primjeru izjavili da očekujemo da će naš testni kôd rezultirati a NullPointerException.

To je dovoljno ako nas zanima samo tvrdnja da je izuzetak izbačen.

Kada trebamo provjeriti neka druga svojstva iznimke, možemo koristiti OčekivanoIznimka Pravilo.

Pogledajmo primjer provjere poruka svojstvo iznimke:

@Rule public ExpectedException exceptionRule = ExpectedException.none (); @Test javna void whenExceptionThrown_thenRuleIsApplied () {iznimkaRule.expect (NumberFormatException.class); iznimkaRule.expectMessage ("Za ulazni niz"); Integer.parseInt ("1a"); }

U gornjem primjeru prvo proglašavamo OčekivanoIznimka Pravilo. Zatim u našem testu tvrdimo da kôd koji pokušava analizirati Cijeli broj vrijednost će rezultirati a NumberFormatException s porukom “Za ulazni niz”.

4. Zaključak

U ovom smo članku pokrili utvrđivanje iznimki i s JUnit 4 i s JUnit 5.

Potpuni izvorni kod za primjere dostupan je na GitHubu.