Uplatnenie výnimky je vyvolané v JUnit 4 a 5

1. Úvod

V tomto rýchlom výučbe sa pozrieme na to, ako otestovať, či bola vyvolaná výnimka pomocou knižnice JUnit.

Samozrejme sa postaráme o to, aby sme pokrývali verzie JUnit 4 aj JUnit 5.

2. JUnit 5

JUnit 5 API pre Jupiter predstavuje API tvrdiťHodí metóda uplatňovania výnimiek.

Toto má typ očakávanej výnimky a Spustiteľný funkčné rozhranie, kde môžeme odovzdať testovaný kód pomocou výrazu lambda:

@Test public void whenExceptionThrown_thenAssertionSucceeds () {Výnimka výnimka = assertThrows (NumberFormatException.class, () -> {Integer.parseInt ("1a");}); Reťazec expectMessage = "Pre vstupný reťazec"; Reťazec actualMessage = exception.getMessage (); assertTrue (actualMessage.contains (expectMessage)); }

Ak je vyvolaná očakávaná výnimka,tvrdiťHodí vráti výnimku, ktorá nám umožňuje tiež presadiť správu.

Ďalej je dôležité si to uvedomiť toto tvrdenie je splnené, keď priložený kód vyvolá výnimku typu NullPointerException alebo niektorý z jeho odvodených typov.

To znamená, že ak prejdeme Výnimka ako očakávaný typ výnimky bude akákoľvek vyvolaná výnimka úspešná od roku Výnimka je supertypom pre všetky výnimky.

Ak zmeníme vyššie uvedený test tak, aby sme očakávali a RuntimeException, toto tiež prejde:

@Test public void whenDerivedExceptionThrown_thenAssertionSucceds () {Výnimka výnimka = assertThrows (RuntimeException.class, () -> {Integer.parseInt ("1a");}); Reťazec expectMessage = "Pre vstupný reťazec"; Reťazec actualMessage = exception.getMessage (); assertTrue (actualMessage.contains (expectMessage)); }

The assertThrows () metóda umožňuje jemnejšie riadenie logiky tvrdenia výnimiek, pretože ju môžeme použiťokolo konkrétnych častí kódu.

3. JUnit 4

Pri použití JUnit 4 môžeme jednoducho Použi očakávané atribút @Test anotácia vyhlásiť, že očakávame, že v komentovanej testovacej metóde bude hodená výnimka kdekoľvek.

Výsledkom je, že keď je test spustený, zlyhá, ak nie je vyvolaná zadaná výnimka, a prejde, ak je vyvolaná:

@Test (očakáva sa = NullPointerException.class) public void whenExceptionThrown_thenExpectationSatisfied () {Test reťazca = null; test.length (); }

V tomto príklade sme deklarovali, že očakávame, že výsledkom nášho testovacieho kódu bude a NullPointerException.

To stačí, ak nás zaujíma iba tvrdenie, že je vyvolaná výnimka.

Ak potrebujeme overiť niektoré ďalšie vlastnosti výnimky, môžeme použiť znak Očakávaná výnimka pravidlo.

Pozrime sa na príklad overenia správa vlastnosť výnimky:

@ Pravidlo verejné ExpectedException exceptionRule = ExpectedException.none (); @Test public void whenExceptionThrown_thenRuleIsApplied () {exceptionRule.expect (NumberFormatException.class); exceptionRule.expectMessage ("Pre vstupný reťazec"); Integer.parseInt ("1a"); }

V príklade vyššie najskôr deklarujeme Očakávaná výnimka pravidlo. Potom v našom teste tvrdíme, že kód, ktorý sa pokúša analyzovať Celé číslo hodnota bude mať za následok a NumberFormatException so správou „Pre vstupný reťazec“.

4. Záver

V tomto článku sme sa venovali uplatňovaniu výnimiek v prípade JUnit 4 aj JUnit 5.

Celý zdrojový kód príkladov je k dispozícii na GitHub.


$config[zx-auto] not found$config[zx-overlay] not found