4.1 @ปิดการใช้งาน
ตอนนี้ มาดูคำอธิบายประกอบที่มีประโยชน์และเป็นที่นิยมของเฟรมเวิร์ก JUnit กัน คำอธิบายประกอบแรกอนุญาตให้คุณปิดการทดสอบเฉพาะ เพื่อไม่ให้ JUnit เรียกใช้ จำเป็นต้องใช้ในกรณีที่คุณสังเกตเห็นว่าการทดสอบทำงานไม่ถูกต้อง หรือคุณเปลี่ยนรหัสและการทดสอบผิดพลาดโดยไม่ตั้งใจ
อย่างที่ฉันเขียนไปก่อนหน้านี้ 99% ของการทดสอบไม่ได้รับการสนับสนุนโดยใครเลย ดังนั้นการทดสอบทั้งหมดจึงถูกปิดใช้งานไม่ช้าก็เร็ว ดังนั้นคำอธิบายประกอบนี้จึงเป็นรายการแรกในรายการที่มีประโยชน์
พิจารณาตัวอย่างของเธอ:
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")));
}
}
ในตัวอย่างข้างต้นtestOnDev()
จะไม่มีการเรียกใช้ เมธอด อย่างไรก็ตาม@Disabled
สามารถเขียนคำอธิบายประกอบได้ทันทีก่อนการประกาศคลาส จากนั้นเมธอดทั้งหมดจะถูกละเว้น
@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 @ซ้อน
JUnit อนุญาตให้คุณเรียกใช้เมธอดการทดสอบในคลาสที่ซ้อนกัน ฉันหมายถึงคลาสทดสอบที่ซ้อนกัน ไม่ใช่ความจริงที่ว่าคุณจะพบบ่อย แต่มีความเป็นไปได้ดังนั้นคุณต้องเข้าใจว่ามันคืออะไร
หากต้องการเรียกใช้เมธอดของคลาสที่ซ้อนกันก่อนที่จะประกาศ คุณต้องเขียนคำอธิบาย@Nested
ประกอบ ตัวอย่าง:
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")));
}
}
}
สามารถดูรายละเอียดเพิ่มเติมได้ในเอกสาร อย่างเป็น ทางการ
4.3 @ขยายด้วย
คำอธิบายประกอบที่มีประโยชน์อีกอย่างหนึ่ง@ExtendWith
คือ เป็นไปได้มากว่าคุณจะพบเธอบ่อยมาก ดังนั้นเรามาดูรายละเอียดเพิ่มเติมกันดีกว่า
JUnit เป็นเฟรมเวิร์กอันทรงพลังที่ให้คุณเขียนปลั๊กอิน (ส่วนขยาย) ต่างๆ เพื่อปรับแต่งงานของคุณได้อย่างยืดหยุ่น ส่วนขยายบางอย่างสามารถรวบรวมสถิติเกี่ยวกับการทดสอบ ส่วนขยายอื่นๆ สามารถจำลองระบบไฟล์ในหน่วยความจำได้ ส่วนขยายอื่นๆ สามารถจำลองการทำงานภายในเว็บเซิร์ฟเวอร์ และอื่นๆ
หากโค้ดของคุณทำงานภายในเฟรม เวิร์ก (เช่น Spring) เฟรมเวิร์กนี้จะจัดการการสร้างและการกำหนดค่าออบเจกต์ในโค้ดของคุณเกือบทุกครั้ง ดังนั้นปลั๊กอินทดสอบพิเศษจึงขาดไม่ได้ ตัวอย่าง:
ตัวอย่างที่ 1 ส่วนขยายWebServerExtension
ส่งผ่านไปยังวิธีการทดสอบที่เรียกURL
เพื่อให้ทำงานได้อย่างถูกต้อง
@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());
}
นี่คือวิธีที่การทดสอบมักจะเริ่มทดสอบโค้ดที่ทำงานกับ Spring framework:
@ExtendWith(SpringExtension.class)
@ExtendWith(MockitoExtension.class)
class TestServiceTest {
@MockBean
TestService service;
@Test
void test() {
assertNotNull(service); // Test succeeds
}
}
SpringExtension
สร้างเวอร์ชันทดสอบของ Spring framework แต่MockitoExtention
อนุญาตให้คุณสร้างวัตถุปลอมได้ วัตถุปลอมเป็นหัวข้อที่น่าสนใจมาก เราจะพูดถึงมันอย่างแน่นอน แต่หลังจากนั้นไม่นาน
4.4 @หมดเวลา
ขอจบการบรรยายนี้ด้วยคำอธิบายประกอบเล็กๆ น้อยๆ ที่น่า@Timeout
สนใจ ช่วยให้คุณตั้งเวลาเพื่อเรียกใช้การทดสอบ หากการทดสอบใช้เวลานานกว่าที่ระบุในคำอธิบายประกอบ จะถือว่าล้มเหลว
class TimeoutDemo {
@Test
@Timeout(value = 100, unit = TimeUnit.MILLISECONDS)
void failsIfExecutionTimeExceeds100Milliseconds() {
// test will fail if it takes more than 100 milliseconds
}
}
จบการบรรยายของเราเพียงเท่านี้
GO TO FULL VERSION