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 @Disabled
boleh 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 WebServerExtension
beralih kepada kaedah ujian yang dipanggil URL
untuk 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
}
}
SpringExtension
mencipta versi ujian rangka kerja Spring, tetapi MockitoExtention
membolehkan 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.
GO TO FULL VERSION