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

Brug af Fail Assertion i JUnit

1. Oversigt

I denne øvelse vil vi udforske, hvordan man bruger JUnit fail påstand for almindelige testscenarier.

Vi vil også se fail() metodeforskelle mellem JUnit 4 og JUnit 5.

2. Bruger fail Påstand

Den fejl assertion mislykkes i en test, der kaster en AssertionError betingelsesløst.

Når vi skriver enhedstests, kan vi bruge fail for eksplicit at skabe en fejl under ønskede testforhold. Lad os se nogle tilfælde, hvor dette kan være nyttigt.

2.1. Ufuldstændig test

Vi kan fejle en test, når den er ufuldstændig eller endnu ikke implementeret:

@Test
public void incompleteTest() {
    fail("Not yet implemented");
}

2.2. Forventet undtagelse

Vi kan også gøre det, når vi tror, ​​der vil ske en undtagelse:

@Test
public void expectedException() {
    try {
        methodThrowsException();
        fail("Expected exception was not thrown");
    } catch (Exception e) {
        assertNotNull(e);
    }
}

2.3. Uventet undtagelse

At fejle i testen, når en undtagelse ikke forventes at blive kastet, er en anden mulighed:

@Test
public void unexpectedException() {
    try {
        safeMethod();
        // more testing code
    } catch (Exception e) {
        fail("Unexpected exception was thrown");
    }
}

2.4. Testtilstand

Vi kan kalde fail()  når et resultat ikke opfylder en ønsket betingelse:

@Test
public void testingCondition() {
    int result = randomInteger();
    if(result > Integer.MAX_VALUE) {
        fail("Result cannot exceed integer max value");
    }
    // more testing code
}

2.5. Returnerer før

Endelig kan vi fejle en test, når koden ikke vender tilbage/bryder, når det forventes:

@Test
public void returnBefore() {
    int value = randomInteger();
    for (int i = 0; i < 5; i++) {
        // returns when (value + i) is an even number
        if ((i + value) % 2 == 0) {
            return;
        }
    }
    fail("Should have returned before");
}

3. JUnit 5 vs JUnit 4

Alle påstande i JUnit 4 er en del af org.junit.Assert klasse. For JUnit 5 blev disse flyttet til org.junit.jupiter.api.Assertions.

Når vi kalder fail i JUnit 5 og får en undtagelse, modtager vi en AssertionFailedError i stedet for AssertionError fundet i  JUnit 4.

Sammen med fail() og fail(String message) , JUnit 5 indeholder nogle nyttige overbelastninger:

  • fail(Throwable cause)
  • fail(String message, Throwable cause)
  • fail(Supplier messageSupplier)

Desuden er alle former for fejl er erklæret som offentlig statisk V fail() i JUnit 5. Den generiske returtype V, tillader, at disse metoder bruges som enkeltudsagn i lambda-udtryk:

Stream.of().map(entry -> fail("should not be called"));

4. Konklusion

I denne artikel dækkede vi nogle praktiske tilfælde af fejl påstand i JUnit. Se JUnit Assertions for alle tilgængelige påstande i JUnit 4 og JUnit 5.

Vi fremhævede også de vigtigste forskelle mellem JUnit 4 og JUnit 5 og nogle nyttige forbedringer af fail metode.

Som altid er den fulde kildekode til artiklen tilgængelig på GitHub.


Java tag