CodeGym/Java kurs/Modul 3/Användbara kommentarer i JUnit

Användbara kommentarer i JUnit

Nivå, Lektion
Tillgängliga

4.1 @Inaktiverad

Låt oss nu titta på några mycket användbara och populära kommentarer i JUnit-ramverket. Den första anteckningen låter dig stänga av ett specifikt test så att JUnit inte kallar det. Det behövs i de fall du märker att testet inte fungerar korrekt, eller du ändrar koden och testet av misstag går sönder.

Som jag skrev tidigare så stöds inte 99% av testerna av någon, så de visar sig alla vara inaktiverade förr eller senare. Därför är den här kommentaren den första i listan över användbara.

Tänk på hennes exempel:

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 exemplet ovan kommer metoden testOnDev()inte att anropas. Förresten, annoteringen @Disabledkan skrivas omedelbart före klassdeklarationen, då kommer alla dess metoder att ignoreras.

@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 låter dig anropa testmetoder på kapslade klasser. Jag menar kapslade testklasser. Det är inte ett faktum att du ofta kommer att stöta på dem, men det finns en sådan möjlighet, så du måste förstå vad det är.

För att anropa metoderna för en kapslad klass före dess deklaration måste du skriva en anteckning @Nested. Exempel:

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")));
        }
   }
}

Mer information finns i den officiella dokumentationen .

4.3 @ExtendWith

En annan användbar anteckning är @ExtendWith. Troligtvis kommer du att träffa henne väldigt ofta, så låt oss titta på henne mer i detalj.

JUnit är ett kraftfullt ramverk som låter dig skriva olika plugins (tillägg) för flexibel anpassning av ditt arbete. Vissa tillägg kan samla in statistik om tester, andra kan emulera ett filsystem i minnet, andra kan emulera att arbeta inuti en webbserver och så vidare.

Om din kod körs i ett ramverk (till exempel Spring), hanterar nästan alltid detta ramverk skapandet och konfigureringen av objekt i din kod . Därför är en speciell testplugin oumbärlig. Exempel:

Exempel 1. Tillägget WebServerExtensiongår över till den anropade testmetoden URLför att fungera 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å här brukar tester börja testa kod som fungerar med Spring-ramverket:

@ExtendWith(SpringExtension.class)
@ExtendWith(MockitoExtension.class)
class TestServiceTest {

    @MockBean
    TestService service;

    @Test
    void test() {
        assertNotNull(service); // Test succeeds
    }
}

SpringExtensionskapar en testversion av Spring-ramverket, men MockitoExtentionlåter dig skapa falska objekt. Falska föremål är ett mycket intressant ämne, vi kommer definitivt att beröra det, men lite senare.

4.4 @Timeout

Låt oss avsluta denna föreläsning med en liten och intressant kommentar @Timeout. Det låter dig ställa in tiden för att köra testet. Om testet tog längre tid än vad som anges i anteckningen anses det vara misslyckat.

class TimeoutDemo {
    @Test
    @Timeout(value = 100, unit = TimeUnit.MILLISECONDS)
    void failsIfExecutionTimeExceeds100Milliseconds() {
        // test will fail if it takes more than 100 milliseconds
    }
}

Detta avslutar vår föreläsning.

Kommentarer
  • Populär
  • Ny
  • Gammal
Du måste vara inloggad för att lämna en kommentar
Den här sidan har inga kommentarer än