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
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.