4.1 @Dilumpuhkan

Sekarang mari kita lihat beberapa anotasi yang sangat berguna dan popular bagi rangka kerja JUnit. Anotasi pertama membolehkan anda mematikan ujian tertentu supaya JUnit tidak memanggilnya. Ia diperlukan dalam kes di mana anda perasan bahawa ujian tidak berfungsi dengan betul, atau anda menukar kod dan ujian itu rosak secara tidak sengaja.

Seperti yang saya tulis sebelum ini, 99% daripada ujian tidak disokong oleh sesiapa, jadi semuanya akan dilumpuhkan lambat laun. Oleh itu, anotasi ini adalah yang pertama dalam senarai yang berguna.

Pertimbangkan contoh dia:

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

Dalam contoh di atas, kaedah testOnDev()tidak akan dipanggil. Dengan cara ini, anotasi @Disabledboleh ditulis sejurus sebelum pengisytiharan kelas, maka semua kaedahnya 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 membolehkan anda memanggil kaedah ujian pada kelas bersarang. Maksud saya kelas ujian bersarang. Bukan fakta bahawa anda akan sering menghadapi mereka, tetapi ada kemungkinan sedemikian, jadi anda perlu memahami apa itu.

Untuk memanggil kaedah kelas bersarang sebelum pengisytiharannya, 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")));
        }
   }
}

Butiran lanjut boleh didapati dalam dokumentasi rasmi .

4.3 @ExtendWith

Satu lagi anotasi berguna ialah @ExtendWith. Kemungkinan besar anda akan sering bertemu dengannya, jadi mari kita lihat dia dengan lebih terperinci.

JUnit ialah rangka kerja berkuasa yang membolehkan anda menulis pelbagai pemalam (sambungan) untuk penyesuaian fleksibel kerja anda. Sesetengah sambungan boleh mengumpul statistik tentang ujian, yang lain boleh meniru sistem fail dalam memori, yang lain boleh meniru bekerja di dalam pelayan web, dan sebagainya.

Jika kod anda berjalan di dalam rangka kerja (contohnya, Spring), maka hampir selalu rangka kerja ini mengurus penciptaan dan konfigurasi objek dalam kod anda . Oleh itu, pemalam ujian khas sangat diperlukan. Contoh:

Contoh 1. Sambungan WebServerExtensionberalih kepada kaedah ujian yang dipanggil URLuntuk berfungsi dengan betul.

@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 ujian biasanya mula menguji kod yang berfungsi dengan rangka kerja Spring:

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

    @MockBean
    TestService service;

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

SpringExtensionmencipta versi ujian rangka kerja Spring, tetapi MockitoExtentionmembolehkan anda mencipta objek palsu. Objek palsu adalah topik yang sangat menarik, kami pasti akan menyentuhnya, tetapi sedikit kemudian.

4.4 @Tamat masa

Jom tamatkan kuliah ini dengan anotasi yang kecil dan menarik @Timeout. Ia membolehkan anda menetapkan masa untuk menjalankan ujian. Jika ujian mengambil masa lebih lama daripada yang dinyatakan dalam anotasi, maka ujian itu dianggap gagal.

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

Ini mengakhiri kuliah kami.