4.1 @Pateni

Saiki ayo goleki sawetara anotasi sing migunani lan populer babagan kerangka JUnit. Anotasi pisanan ngidini sampeyan mateni tes tartamtu supaya JUnit ora nelpon. Perlu yen sampeyan ngelingi yen tes ora bisa digunakake kanthi bener, utawa sampeyan ngganti kode lan tes kasebut ora sengaja rusak.

Kaya sing dakcritakake sadurunge, 99% tes kasebut ora didhukung dening sapa wae, mula kabeh mau cepet-cepet dipateni. Mulane, anotasi iki minangka sing pisanan ing dhaptar sing migunani.

Coba contone:

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

Ing conto ing ndhuwur, cara kasebut testOnDev()ora bakal diarani. Miturut cara, anotasi @Disabledbisa ditulis langsung sadurunge deklarasi kelas, banjur kabeh cara bakal diabaikan.

@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 ngijini sampeyan kanggo nelpon cara test ing kelas nested. Maksudku kelas tes nested. Iku ora kasunyatan sing bakal kerep ketemu wong, nanging ana kamungkinan, supaya sampeyan kudu ngerti apa iku.

Kanggo nelpon metode kelas nested sadurunge deklarasi, sampeyan kudu nulis anotasi @Nested. Tuladha:

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

Rincian liyane bisa ditemokake ing dokumentasi resmi .

4.3 @ExtendWith

Anotasi liyane sing migunani yaiku @ExtendWith. Paling kamungkinan, sampeyan bakal kerep ketemu dheweke, supaya katon ing liyane rinci.

JUnit minangka kerangka kuat sing ngidini sampeyan nulis macem-macem plugin (ekstensi) kanggo kustomisasi fleksibel karya sampeyan. Sawetara ekstensi bisa ngumpulake statistik babagan tes, liyane bisa niru sistem file ing memori, liyane bisa niru kerja ing server web, lan liya-liyane.

Yen kode sampeyan mlaku ing framework (contone, Spring), meh mesthi framework iki ngatur nggawe lan konfigurasi obyek ing kode sampeyan . Mulane, plugin tes khusus dibutuhake. Tuladha:

Conto 1. Ekstensi kasebut WebServerExtensionliwat metode tes sing diarani URLsupaya bisa digunakake kanthi bener.

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

Iki carane tes biasane miwiti nyoba kode sing bisa digunakake karo kerangka Spring:

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

    @MockBean
    TestService service;

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

SpringExtensionnggawe versi test saka framework Spring, nanging MockitoExtentionngijini sampeyan kanggo nggawe obyek palsu. Obyek palsu minangka topik sing menarik banget, kita mesthi bakal ndemek, nanging mengko.

4.4 @Wanci entek

Ayo rampungake kuliah iki kanthi anotasi cilik lan menarik @Timeout. Iku ngidini sampeyan nyetel wektu kanggo mbukak test. Yen tes njupuk wektu luwih saka sing ditemtokake ing anotasi, banjur dianggep gagal.

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

Iki mungkasi ceramah kita.