CodeGym/Java tanfolyam//Hasznos megjegyzések a JUnitben

Hasznos megjegyzések a JUnitben

Szint, Lecke
Elérhető

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 @Disabledkö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
    }
}

SpringExtensionlétrehozza a Spring keretrendszer tesztverzióját, de MockitoExtentionlehető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.

Hozzászólások
  • Népszerű
  • Új
  • Régi
Hozzászólás írásához be kell jelentkeznie
Ennek az oldalnak még nincsenek megjegyzései