Java >> Java tutorial >  >> Tag >> assert

Påstå en undtagelse er smidt i JUnit 4 og 5

1. Introduktion

I denne hurtige selvstudie vil vi se på, hvordan man tester, om der blev smidt en undtagelse ved hjælp af JUnit-biblioteket.

Vi vil selvfølgelig sørge for at dække både JUnit 4- og JUnit 5-versionerne.

Yderligere læsning:

AssertJ Exception Assertions

Lær, hvordan du bruger AssertJ til at udføre påstande om undtagelser. Læs mere →

Påstande i JUnit 4 og JUnit 5

Et kig på påstande i både JUnit 4 og 5. Læs mere →

Hånende undtagelseskastning ved hjælp af Mockito

Lær at konfigurere et metodekald til at kaste en undtagelse i Mockito.Læs mere →

2. JUnit 5

JUnit 5 Jupiter assertions API introducerer assertThrows metode til at hævde undtagelser.

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

@Test
public void whenExceptionThrown_thenAssertionSucceeds() {
    Exception exception = assertThrows(NumberFormatException.class, () -> {
        Integer.parseInt("1a");
    });

    String expectedMessage = "For input string";
    String actualMessage = exception.getMessage();

    assertTrue(actualMessage.contains(expectedMessage));
}

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

Desuden er det vigtigt at bemærke, at denne påstand er opfyldt, når den vedlagte kode afgiver en undtagelse af typen NumberFormatException eller nogen af ​​dens afledte typer.

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

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

@Test
public void whenDerivedExceptionThrown_thenAssertionSucceeds() {
    Exception exception = assertThrows(RuntimeException.class, () -> {
        Integer.parseInt("1a");
    });

    String expectedMessage = "For input string";
    String actualMessage = exception.getMessage();

    assertTrue(actualMessage.contains(expectedMessage));
}

assertThrows() metoden muliggør mere finkornet kontrol til logik for undtagelsespåstande, fordi vi kan bruge det omkring bestemte dele af koden.

3. JUnit 4

Når vi bruger JUnit 4, kan vi simpelthen bruge den forventede attributten for @Test anmærkning at erklære, at vi forventer, at en undtagelse bliver kastet 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(expected = NullPointerException.class)
public void whenExceptionThrown_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 interesseret i at hævde, at en undtagelse er kastet.

Når vi skal verificere nogle andre egenskaber for undtagelsen, kan vi bruge ExpectedException regel.

Lad os se et eksempel på bekræftelse af meddelelsen egenskab for en undtagelse:

@Rule
public ExpectedException exceptionRule = ExpectedException.none();

@Test
public void whenExceptionThrown_thenRuleIsApplied() {
    exceptionRule.expect(NumberFormatException.class);
    exceptionRule.expectMessage("For input string");
    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 parse et heltal værdi vil resultere i en NumberFormatException med beskeden "Til inputstreng".

4. Konklusion

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

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


Java tag