4.1 @Dinonaktifkan

Sekarang mari kita lihat beberapa anotasi kerangka JUnit yang sangat berguna dan populer. Anotasi pertama memungkinkan Anda mematikan tes tertentu sehingga JUnit tidak memanggilnya. Ini diperlukan jika Anda melihat bahwa pengujian tidak berfungsi dengan benar, atau Anda mengubah kode dan pengujian tidak sengaja rusak.

Seperti yang saya tulis sebelumnya, 99% tes tidak didukung oleh siapa pun, jadi cepat atau lambat semuanya akan dinonaktifkan. Oleh karena itu, anotasi ini adalah yang pertama dalam daftar yang bermanfaat.

Pertimbangkan contohnya:

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

Pada contoh di atas, metode testOnDev()tidak akan dipanggil. Ngomong-ngomong, anotasi @Disabledbisa ditulis tepat sebelum deklarasi kelas, lalu semua metodenya akan 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 @Bersarang

JUnit memungkinkan Anda memanggil metode pengujian pada kelas bersarang. Maksud saya kelas tes bersarang. Bukan fakta bahwa Anda akan sering bertemu dengan mereka, tetapi kemungkinan seperti itu ada, jadi Anda perlu memahami apa itu.

Untuk memanggil metode kelas bersarang sebelum mendeklarasikannya, Anda perlu menulis anotasi @Nested. Contoh:

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 lebih lanjut dapat ditemukan di dokumentasi resmi .

4.3 @PerpanjangDengan

Anotasi berguna lainnya adalah @ExtendWith. Kemungkinan besar Anda akan sangat sering bertemu dengannya, jadi mari kita lihat dia lebih detail.

JUnit adalah kerangka kerja yang kuat yang memungkinkan Anda menulis berbagai plugin (ekstensi) untuk penyesuaian pekerjaan Anda secara fleksibel. Beberapa ekstensi dapat mengumpulkan statistik tentang pengujian, yang lain dapat meniru sistem file dalam memori, yang lain dapat meniru bekerja di dalam server web, dan seterusnya.

Jika kode Anda berjalan di dalam kerangka kerja (misalnya, Spring), kerangka kerja ini hampir selalu mengelola pembuatan dan konfigurasi objek dalam kode Anda . Oleh karena itu, plugin pengujian khusus sangat diperlukan. Contoh:

Contoh 1. Ekstensi WebServerExtensionditeruskan ke metode pengujian yang dipanggil URLuntuk bekerja dengan benar.

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

Beginilah cara pengujian biasanya mulai menguji kode yang berfungsi dengan kerangka kerja Spring:

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

    @MockBean
    TestService service;

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

SpringExtensionmembuat versi uji kerangka Spring, tetapi MockitoExtentionmemungkinkan Anda membuat objek palsu. Objek palsu adalah topik yang sangat menarik, kami pasti akan menyentuhnya, tetapi nanti.

4.4 @Waktu habis

Mari selesaikan kuliah ini dengan anotasi kecil dan menarik @Timeout. Ini memungkinkan Anda mengatur waktu untuk menjalankan tes. Jika tes memakan waktu lebih lama dari yang ditentukan dalam anotasi, maka dianggap gagal.

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

Ini menyimpulkan kuliah kami.