Påstå at et unntak er kastet i JUnit 4 og 5

1. Introduksjon

I denne raske opplæringen vil vi se på hvordan vi kan teste om et unntak ble kastet ved hjelp av JUnit-biblioteket.

Vi vil selvfølgelig sørge for å dekke både JUnit 4 og JUnit 5-versjonene.

2. JUnit 5

JUnit 5 Jupiter påstander API introduserer hevder Kaster metode for å hevde unntak.

Dette tar typen forventet unntak og en Kjørbar funksjonelt grensesnitt der vi kan sende koden under test gjennom et lambdauttrykk:

@Test offentlig ugyldig nårExceptionThrown_thenAssertionSucceed () {Unntak unntak = assertThrows (NumberFormatException.class, () -> {Integer.parseInt ("1a");}); String expectMessage = "For input streng"; Streng actualMessage = exception.getMessage (); assertTrue (actualMessage.contains (expectedMessage)); }

Hvis det forventede unntaket blir kastet,hevder Kaster returnerer unntaket, som gjør at vi også kan hevde meldingen.

Videre er det viktig å merke seg det denne påstanden er oppfylt når den vedlagte koden gir et unntak av typen NullPointerException eller noen av dens avledede typer.

Dette betyr at hvis vi passerer Unntak som forventet unntakstype, vil ethvert unntak som kastes gjøre påstanden lykkes siden Unntak er supertypen for alle unntak.

Hvis vi endrer testen ovenfor for å forvente a RuntimeException, dette vil også passere:

@Test offentlig ugyldig nårDerivedExceptionThrown_thenAssertionSucceds () {Unntak unntak = assertThrows (RuntimeException.class, () -> {Integer.parseInt ("1a");}); String expectMessage = "For input streng"; String actualMessage = exception.getMessage (); assertTrue (actualMessage.contains (expectedMessage)); }

De assertTrowes () metoden muliggjør mer finkornet kontroll for unntak påstand logikk fordi vi kan brukeden rundt bestemte deler av koden.

3. JUnit 4

Når du bruker JUnit 4, kan vi ganske enkelt bruke forventet attributt til @Test kommentar å erklære at vi forventer at et unntak blir kastet hvor som helst i den merkede testmetoden.

Som et resultat, når testen kjøres, vil den mislykkes hvis det angitte unntaket ikke kastes og vil bestå hvis det blir kastet:

@Test (forventet = NullPointerException.class) offentlig ugyldig nårExceptionThrown_thenExpectationSatisfied () {Streng test = null; test.length (); }

I dette eksemplet har vi erklært at vi forventer at testkoden vår vil resultere i en NullPointerException.

Dette er nok hvis vi bare er interessert i å hevde at et unntak blir kastet.

Når vi trenger å verifisere noen andre egenskaper for unntaket, kan vi bruke ExpectedException regel.

La oss se et eksempel på å verifisere beskjed eiendom med unntak:

@Rule public ExpectedException exceptionRule = ExpectedException.none (); @Test offentlig ugyldig nårExceptionThrown_thenRuleIsApplied () {exceptionRule.expect (NumberFormatException.class); exceptionRule.expectMessage ("For input string"); Integer.parseInt ("1a"); }

I eksemplet ovenfor erklærer vi først ExpectedException regel. Så i testen vår hevder vi at koden som prøver å analysere en Heltall verdi vil resultere i en NumberFormatException med meldingen “For input string”.

4. Konklusjon

I denne artikkelen dekket vi påstand om unntak med både JUnit 4 og JUnit 5.

Den fullstendige kildekoden for eksemplene er tilgjengelig på GitHub.


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