4.1 @Deaktiveret
Lad os nu se på nogle meget nyttige og populære annotationer af JUnit-rammen. Den første annotation giver dig mulighed for at slå en specifik test fra, så JUnit ikke kalder den. Det er nødvendigt i tilfælde, hvor du bemærker, at testen ikke fungerer korrekt, eller du ændrer koden, og testen går i stykker ved et uheld.
Som jeg skrev tidligere, er 99% af testene ikke understøttet af nogen, så de viser sig alle at være deaktiveret før eller siden. Derfor er denne annotation den første på listen over nyttige.
Overvej hendes eksempel:
public class AppTest {
@Disabled("Test is temporarily disabled. True, true")
@Test
void testOnDev(){
System.setProperty("ENV", "DEV");
Assumptions.assumeFalse("DEV".equals(System.getProperty("ENV")));
}
@Test
void testOnProd(){
System.setProperty("ENV", "PROD");
Assumptions.assumeFalse("DEV".equals(System.getProperty("ENV")));
}
}
I eksemplet ovenfor vil metoden testOnDev()
ikke blive kaldt. Forresten @Disabled
kan annoteringen skrives umiddelbart før klasseerklæringen, så vil alle dens metoder blive ignoreret.
@Disabled("Temporarily turned off the test, we will fix it by May 2001")
public class AppTest {
@Test
void testOnDev(){
System.setProperty("ENV", "DEV");
Assumptions.assumeFalse("DEV".equals(System.getProperty("ENV")));
}
@Test
void testOnProd(){
System.setProperty("ENV", "PROD");
Assumptions.assumeFalse("DEV".equals(System.getProperty("ENV")));
}
}
4.2 @Nested
JUnit giver dig mulighed for at kalde testmetoder på indlejrede klasser. Jeg mener indlejrede testklasser. Det er ikke et faktum, at du ofte vil støde på dem, men der er sådan en mulighed, så du skal forstå, hvad det er.
For at kalde metoderne for en indlejret klasse før dens erklæring, skal du skrive en annotation @Nested
. Eksempel:
public class AppTest {
@Nested
public class DevStagingEnvironment {
@Test
void testOnDev(){
System.setProperty("ENV", "DEV");
Assumptions.assumeFalse("DEV".equals(System.getProperty("ENV")));
}
}
@Nested
public class ProductionEnvironment {
@Test
void testOnProd(){
System.setProperty("ENV", "PROD");
Assumptions.assumeFalse("DEV".equals(System.getProperty("ENV")));
}
}
}
Flere detaljer kan findes i den officielle dokumentation .
4.3 @ExtendWith
En anden nyttig anmærkning er @ExtendWith
. Mest sandsynligt vil du møde hende meget ofte, så lad os se nærmere på hende.
JUnit er en kraftfuld ramme, der giver dig mulighed for at skrive forskellige plugins (udvidelser) til fleksibel tilpasning af dit arbejde. Nogle udvidelser kan indsamle statistik om tests, andre kan efterligne et filsystem i hukommelsen, andre kan efterligne arbejde inde i en webserver og så videre.
Hvis din kode kører inde i en ramme (for eksempel Spring), så styrer denne ramme næsten altid oprettelsen og konfigurationen af objekter i din kode . Derfor er et særligt test-plugin uundværligt. Eksempler:
Eksempel 1. Udvidelsen WebServerExtension
går over til den kaldte testmetode URL
for at fungere korrekt.
@Test
@ExtendWith(WebServerExtension.class)
void getProductList(@WebServerUrl String serverUrl) {
WebClient webClient = new WebClient();
// Use WebClient to connect to web server using serverUrl and verify response
assertEquals(200, webClient.get(serverUrl + "/products").getResponseStatus());
}
Sådan begynder tests normalt at teste kode, der fungerer med Spring frameworket:
@ExtendWith(SpringExtension.class)
@ExtendWith(MockitoExtension.class)
class TestServiceTest {
@MockBean
TestService service;
@Test
void test() {
assertNotNull(service); // Test succeeds
}
}
SpringExtension
opretter en testversion af Spring frameworket, men MockitoExtention
giver dig mulighed for at oprette falske objekter. Falske genstande er et meget interessant emne, vi vil helt sikkert røre ved det, men lidt senere.
4.4 @Timeout
Lad os afslutte dette foredrag med en lille og interessant kommentar @Timeout
. Det giver dig mulighed for at indstille tidspunktet for at køre testen. Hvis testen tog længere tid end angivet i annotationen, betragtes den som mislykket.
class TimeoutDemo {
@Test
@Timeout(value = 100, unit = TimeUnit.MILLISECONDS)
void failsIfExecutionTimeExceeds100Milliseconds() {
// test will fail if it takes more than 100 milliseconds
}
}
Dette afslutter vores foredrag.
GO TO FULL VERSION