@BeforeAll og @AfterAll i ikke-statiske metoder
1. Oversigt
I dette korte selvstudie skal vi implementere ikke-statiske metoder med @BeforeAll og @AfterAll annoteringer tilgængelige i Junit5 .
2. @BeforeAll og @AfterAll i ikke-statiske metoder
Under enhedstestning kan vi lejlighedsvis bruge @BeforeAll og @AfterAll i ikke-statiske opsætnings- og nedtagningsmetoder - for eksempel i en @Nested testklasse eller som standardgrænseflademetoder.
Lad os oprette en testklasse med @BeforeAll og @AfterAll metoder som ikke-statiske:
public class BeforeAndAfterAnnotationsUnitTest {
String input;
Long result;
@BeforeAll
public void setup() {
input = "77";
}
@AfterAll
public void teardown() {
input = null;
result = null;
}
@Test
public void whenConvertStringToLong_thenResultShouldBeLong() {
result = Long.valueOf(input);
Assertions.assertEquals(77l, result);
}
}
Hvis vi kører ovenstående kode, vil den give en undtagelse:
org.junit.platform.commons.JUnitException: ...
Lad os nu se, hvordan vi kan undgå denne situation.
3. @TestInstance Anmærkning
Vi bruger @TestInstance anmærkning for at konfigurere livscyklussen for en test. Hvis vi ikke erklærer det på vores testklasse, vil livscyklustilstanden være PER_METHOD som standard. Så for at forhindre vores testklasse i at kaste en JUnitException, vi skal annotere det med @TestInstance(TestInstance. Livscyklus.PER_CLASS) .
Lad os lave vores testklasse om og tilføje @TestInstance(TestInstance.). Livscyklus.PER_CLASS):
@TestInstance(TestInstance.Lifecycle.PER_CLASS)
public class BeforeAndAfterAnnotationsUnitTest {
String input;
Long result;
@BeforeAll
public void setup() {
input = "77";
}
@AfterAll
public void teardown() {
input = null;
result = null;
}
@Test
public void whenConvertStringToLong_thenResultShouldBeLong() {
result = Long.valueOf(input);
Assertions.assertEquals(77l, result);
}
}
I dette tilfælde kører vores test med succes.
4. Konklusion
I denne korte artikel har vi lært, hvordan man bruger @BeforeAll og @AfterAll i ikke-statiske metoder. Først startede vi med et simpelt ikke-statisk eksempel for at vise, hvad der sker, hvis vi ikke inkluderer @TestInstance anmærkning. Derefter annoterede vi vores test med @TestInstance(TestInstance.Lifecycle.PER_CLASS) for at forhindre udsendelse af en JUnitException .
Som altid er implementeringen af alle disse eksempler slut på GitHub.