Påstå, at en undtagelse er kastet i JUnit 4 og 5

1. Introduktion

I denne hurtige vejledning ser vi på, hvordan man tester, om en undtagelse blev kastet ved hjælp af JUnit-biblioteket.

Vi sørger naturligvis for at dække både JUnit 4 og JUnit 5 versionerne.

2. JUnit 5

JUnit 5 Jupiter påstande API introducerer hævder kaster metode til at hævde undtagelser.

Dette tager typen af ​​den forventede undtagelse og en Eksekverbar funktionel grænseflade, hvor vi kan videregive koden under test gennem et lambda-udtryk:

@Test offentlig ugyldig nårExceptionThrown_thenAssertionSucceed () {Undtagelsesundtagelse = assertThrows (NumberFormatException.class, () -> {Integer.parseInt ("1a");}); String expectMessage = "Til inputstreng"; String actualMessage = exception.getMessage (); assertTrue (actualMessage.contains (expectMessage)); }

Hvis den forventede undtagelse kastes,hævder kaster returnerer undtagelsen, som gør det muligt for os også at hævde meddelelsen.

Desuden er det vigtigt at bemærke det denne påstand er opfyldt, når den vedlagte kode kaster en undtagelse af typen NullPointerException eller en hvilken som helst af dens afledte typer.

Det betyder, at hvis vi passerer Undtagelse som den forventede undtagelsestype, vil enhver undtagelse, der kastes, få påstanden til at lykkes siden Undtagelse er supertypen for alle undtagelser.

Hvis vi ændrer testen ovenfor for at forvente en RuntimeException, dette vil også passere:

@Test offentlig ugyldig nårDerivedExceptionThrown_thenAssertionSucceds () {Undtagelsesundtagelse = assertThrows (RuntimeException.class, () -> {Integer.parseInt ("1a");}); String expectMessage = "Til inputstreng"; String actualMessage = exception.getMessage (); assertTrue (actualMessage.contains (expectMessage)); }

Det assertTrow () metode muliggør mere finkornet kontrol for undtagelses påstandslogik, fordi vi kan brugedet omkring bestemte dele af koden.

3. JUnit 4

Når vi bruger JUnit 4, kan vi bare brug forventet attribut for @Prøve kommentar at erklære, at vi forventer, at en undtagelse kastes overalt i den annoterede testmetode.

Som et resultat, når testen køres, vil den mislykkes, hvis den angivne undtagelse ikke kastes og vil bestå, hvis den kastes:

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

I dette eksempel har vi erklæret, at vi forventer, at vores testkode resulterer i en NullPointerException.

Dette er nok, hvis vi kun er interesserede i at hævde, at en undtagelse kastes.

Når vi har brug for at kontrollere nogle andre egenskaber for undtagelsen, kan vi bruge ExpectedException Herske.

Lad os se et eksempel på at verificere besked ejendom med en undtagelse:

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

I eksemplet ovenfor erklærer vi først ExpectedException Herske. Så i vores test hævder vi, at koden, der forsøger at analysere en Heltal værdi vil resultere i en NumberFormatException med meddelelsen "Til inputstreng".

4. Konklusion

I denne artikel dækkede vi påståede undtagelser med både JUnit 4 og JUnit 5.

Den fulde kildekode til eksemplerne er tilgængelig på GitHub.