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 @Disabled
bisa 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 WebServerExtension
diteruskan ke metode pengujian yang dipanggil URL
untuk 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
}
}
SpringExtension
membuat versi uji kerangka Spring, tetapi MockitoExtention
memungkinkan 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.
GO TO FULL VERSION