4.1 @Deaktiviert

Schauen wir uns nun einige sehr nützliche und beliebte Annotationen des JUnit-Frameworks an. Mit der ersten Annotation können Sie einen bestimmten Test deaktivieren, sodass JUnit ihn nicht aufruft. Dies ist in Fällen erforderlich, in denen Sie feststellen, dass der Test nicht ordnungsgemäß funktioniert oder Sie den Code ändern und der Test versehentlich abbricht.

Wie ich bereits geschrieben habe, werden 99 % der Tests von niemandem unterstützt, sodass sich früher oder später herausstellt, dass sie alle deaktiviert werden. Daher ist diese Anmerkung die erste in der Liste der nützlichen Anmerkungen.

Betrachten Sie ihr Beispiel:

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

Im obigen Beispiel testOnDev()wird die Methode nicht aufgerufen. Die Annotation kann übrigens @Disabledunmittelbar vor der Klassendeklaration geschrieben werden, dann werden alle ihre Methoden ignoriert.

@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

Mit JUnit können Sie Testmethoden für verschachtelte Klassen aufrufen. Ich meine verschachtelte Testklassen. Es ist keine Tatsache, dass Sie oft auf sie stoßen, aber es besteht eine solche Möglichkeit, also müssen Sie verstehen, was sie ist.

Um die Methoden einer verschachtelten Klasse vor ihrer Deklaration aufzurufen, müssen Sie eine Annotation schreiben @Nested. Beispiel:

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

Weitere Details finden Sie in der offiziellen Dokumentation .

4.3 @ExtendWith

Eine weitere nützliche Anmerkung ist @ExtendWith. Höchstwahrscheinlich werden Sie sie sehr oft treffen, also schauen wir sie uns genauer an.

JUnit ist ein leistungsstarkes Framework, mit dem Sie verschiedene Plugins (Erweiterungen) schreiben können, um Ihre Arbeit flexibel anzupassen. Einige Erweiterungen können Statistiken über Tests sammeln, andere können ein In-Memory-Dateisystem emulieren, andere können die Arbeit innerhalb eines Webservers emulieren und so weiter.

Wenn Ihr Code innerhalb eines Frameworks (z. B. Spring) ausgeführt wird, verwaltet dieses Framework fast immer die Erstellung und Konfiguration von Objekten in Ihrem Code . Daher ist ein spezielles Test-Plugin unabdingbar. Beispiele:

Beispiel 1. Die Erweiterung WebServerExtensionübergibt an die aufgerufene Testmethode, URLum korrekt zu funktionieren.

@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());
}

So beginnen Tests normalerweise, um Code zu testen, der mit dem Spring-Framework funktioniert:

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

    @MockBean
    TestService service;

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

SpringExtensionErstellt eine Testversion des Spring-Frameworks, MockitoExtentionermöglicht jedoch die Erstellung gefälschter Objekte. Gefälschte Objekte sind ein sehr interessantes Thema, wir werden es auf jeden Fall ansprechen, aber etwas später.

4.4 @Timeout

Lassen Sie uns diese Vorlesung mit einer kleinen und interessanten Anmerkung beenden @Timeout. Hier können Sie die Zeit für die Ausführung des Tests festlegen. Wenn der Test länger gedauert hat als in der Anmerkung angegeben, gilt er als nicht bestanden.

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

Damit ist unser Vortrag abgeschlossen.