4.1 @Letiltva
Most nézzünk meg néhány nagyon hasznos és népszerű annotációt a JUnit keretrendszerről. Az első megjegyzés lehetővé teszi egy adott teszt kikapcsolását, hogy a JUnit ne hívja meg. Olyan esetekben szükséges, amikor észreveszi, hogy a teszt nem működik megfelelően, vagy megváltoztatja a kódot, és a teszt véletlenül megszakad.
Ahogy korábban is írtam, a tesztek 99%-át senki nem támogatja, így előbb-utóbb mind letiltottnak bizonyul. Ezért ez a megjegyzés az első a hasznosak listáján.
Vegye figyelembe a példáját:
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")));
}
}
A fenti példában a metódus testOnDev()
nem kerül meghívásra. Az annotációt egyébként @Disabled
közvetlenül az osztálydeklaráció elé írhatjuk, ekkor minden metódusát figyelmen kívül hagyja.
@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
A JUnit lehetővé teszi a tesztmetódusok meghívását beágyazott osztályokon. A beágyazott tesztosztályokra gondolok. Nem tény, hogy gyakran találkozni fogsz velük, de van ilyen lehetőség, ezért meg kell értened, mi az.
Ha egy beágyazott osztály metódusait a deklarációja előtt szeretné meghívni, egy annotációt kell írnia @Nested
. Példa:
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")));
}
}
}
További részletek a hivatalos dokumentációban találhatók .
4.3 @ExtendWith
Egy másik hasznos megjegyzés a @ExtendWith
. Valószínűleg nagyon gyakran fog találkozni vele, ezért nézzük meg részletesebben.
A JUnit egy hatékony keretrendszer, amely lehetővé teszi különféle bővítmények (bővítmények) írását a munkája rugalmas testreszabásához. Egyes kiterjesztések statisztikákat gyűjthetnek a tesztekről, mások emulálhatnak egy memórián belüli fájlrendszert, mások emulálhatják a webszerveren belüli munkát, és így tovább.
Ha a kód egy keretrendszeren belül fut (például Spring), akkor szinte mindig ez a keretrendszer kezeli a kódban lévő objektumok létrehozását és konfigurálását . Ezért egy speciális teszt plugin nélkülözhetetlen. Példák:
Példa 1. A kiterjesztés WebServerExtension
átmegy a hívott tesztmódszernek URL
, hogy megfelelően működjön.
@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());
}
A tesztek általában így kezdik a Spring keretrendszerrel működő kód tesztelését:
@ExtendWith(SpringExtension.class)
@ExtendWith(MockitoExtension.class)
class TestServiceTest {
@MockBean
TestService service;
@Test
void test() {
assertNotNull(service); // Test succeeds
}
}
SpringExtension
létrehozza a Spring keretrendszer tesztverzióját, de MockitoExtention
lehetővé teszi hamis objektumok létrehozását. A hamis tárgyak egy nagyon érdekes téma, mindenképpen érintjük, de kicsit később.
4.4 @Időtúllépés
Fejezzük be ezt az előadást egy apró és érdekes annotációval @Timeout
. Lehetővé teszi a teszt futtatásának időpontjának beállítását. Ha a teszt a megjegyzésben megadottnál több időt vett igénybe, akkor sikertelennek minősül.
class TimeoutDemo {
@Test
@Timeout(value = 100, unit = TimeUnit.MILLISECONDS)
void failsIfExecutionTimeExceeds100Milliseconds() {
// test will fail if it takes more than 100 milliseconds
}
}
Ezzel zárjuk előadásunkat.
GO TO FULL VERSION