บทความ: 5 ตัวอย่างการใช้ JUnit ในการทำ Unittest ในภาษา JAVA
ในโลกแห่งการพัฒนาซอฟต์แวร์, การทดสอบซอฟต์แวร์นับเป็นขั้นตอนสำคัญที่ไม่ควรถูกมองข้าม หนึ่งในเทคนิคทดสอบที่ได้รับความนิยมคือการทำ Unittest หรือการทดสอบหน่วยงานที่เน้นไปที่การตรวจสอบความถูกต้องของโค้ดระดับเล็กที่สุด เช่น ฟังก์ชันหรือเมธอด ในภาษา JAVA, JUnit คือหนึ่งในเฟรมเวิร์กที่ถูกใช้ในการทำ Unittest อย่างแพร่หลาย ด้วยความสามารถในการถ่ายทอดผลกระทบของการเปลี่ยนแปลงในโค้ดได้อย่างชัดเจน และช่วยลดโอกาสที่โค้ดจะมีข้อผิดพลาดที่อาจนำไปสู่ปัญหาใหญ่ในระบบ
ในบทความนี้ เราจะมาพูดถึง 5 ตัวอย่างการใช้ JUnit ในการทำ Unittest ซึ่งจะทำให้ท่านได้เห็นภาพความสามารถและประโยชน์ของการทดสอบหน่วยงานในการพัฒนาซอฟต์แวร์
1. การตรวจสอบค่าคืนจากการทำงานของเมธอด
ปัญหาทั่วไปที่พบได้ในการพัฒนาซอฟต์แวร์คือการตรวจสอบว่าเมธอดที่เขียนขึ้นกำลังคืนค่าที่ถูกต้องไหม ตัวอย่างของ Unittest นี้ บ่งชี้ว่าเราสามารถตรวจสอบการออกแบบเมธอดให้ตรงตามเงื่อนไขที่กำหนดไว้
@Test
public void givenNumber_whenIsPrime_thenTrue() {
MyClass tester = new MyClass(); // MyClass คือคลาสที่มีเมธอด isPrime
assertTrue("5 must be a prime number", tester.isPrime(5));
}
คำในวงเล็บคือ Annotation ที่ใช้ใน JUnit และ `assertTrue` คือเมธอดที่ยืนยันว่าผลลัพธ์ของ `isPrime` คือ `true` เมื่อป้อนค่า `5` เข้าไป
2. การทดสอบ Exception ที่คาดว่าจะเกิดขึ้น
บางครั้งโค้ดที่เราเขียนอาจจะคาดหวัง Exception ในกรณีที่ผิดพลาด เราจำเป็นต้องทดสอบว่า Exception ที่คาดหวังนั้นเกิดขึ้นจริงเมื่อเงื่อนไขระบุ
@Test(expected = IllegalArgumentException.class)
public void whenExceptionThrown_thenExpectationSatisfied() {
MyClass tester = new MyClass();
tester.methodThatShouldThrowException();
}
Annotation `@Test` ที่มี parameter `expected` เป็นการบอก JUnit ว่าเราคาดว่า method ที่ทดสอบนี้ควรจะเกิด Exception ประเภท `IllegalArgumentException`
3. การทดสอบการปฏิบัติงานที่ใช้เวลานาน
ในกรณีที่เมธอดที่เราทดสอบใช้เวลานานเกินไป นั่นอาจเป็นเครื่องหมายของปัญหาที่อยู่ภายใน การทดสอบด้วย JUnit สามารถระบุเวลาที่กำหนดให้กับการทำงานของเมธอดได้
@Test(timeout = 1000)
public void whenMethodCalled_thenTimeoutNotExceeded() {
MyClass tester = new MyClass();
tester.methodThatShouldRunWithinTimeout();
}
`timeout` เป็นการอนุญาตให้เมธอดที่ทดสอบ `run for a certain amount of time` ไม่ให้เกินกว่าที่กำหนด
4. การใช้ Assert เพื่อตรวจสอบค่าที่คืนมา
JUnit มีพื้นฐานการตรวจสอบที่เรียกว่า Assert, ซึ่งเป็นการแสดงผลว่าค่าที่คืนมาจากเมธอดที่ทดสอบนั้นตรงกับค่าที่คาดหวังหรือไม่
@Test
public void whenAssertingEquality_thenEqual() {
String expected = "EPT";
String actual = "EPT";
assertEquals(expected, actual);
}
`assertEquals` เป็นเมธอดที่ตรวจสอบว่า `actual` ค่าเท่ากับ `expected` ค่าหรือไม่
5. การทดสอบสถานะของออบเจ็ค
การทดสอบไม่ใช่แค่การตรวจสอบค่าคืน เรายังสามารถทดสอบสถานะของออบเจ็กต์หลังจากดำเนินการบางอย่างได้
@Test
public void whenCheckingObjectStatus_thenCorrect() {
MyClass tester = new MyClass();
tester.changeStatus();
assertTrue("Object status should be 'active'", tester.isActive());
}
ในที่นี้ `isActive()` เป็นเมธอดที่ตรวจสอบสถานะของออบเจ็กต์ว่าเป็น "active" หลังจากที่ถูกเรียกเมธอด `changeStatus()`
การทดสอบ Unittest ด้วย JUnit ในภาษา JAVA นั้นอาจดูเหมือนเป็นเรื่องเล็กน้อย แต่มีพลังอย่างมหาศาลในการลดข้อผิดพลาดในโค้ดและสนับสนุนการพัฒนาซอฟต์แวร์ที่เสถียรและมีคุณภาพ การเรียนรู้และการฝึกฝนการใช้งาน JUnit ในการทำ Unittest เป็นหนึ่งในทักษะที่พัฒนาบุคลากรด้านไอทีในโลกสมัยใหม่รับมือกับความท้าทายได้อย่างมั่นคง
สำหรับท่านที่ต้องการเพิ่มพูนทักษะการเขียนโปรแกรม และมีความรู้ในการทดสอบซอฟต์แวร์อย่างถูกวิธี, การศึกษาต่อด้านการเขียนเทสต์โค้ดเป็นสิ่งที่สามารถเพิ่มศักยภาพและความมั่นใจในการพัฒนา Application ใด ๆ นั่นคือส่วนหนึ่งของหลักการและปรัชญาในการฝึกอบรมที่ EPT ที่เรามุ่งเน้นไปที่การสร้างนักพัฒนาซอฟต์แวร์ที่เข้าใจลึกถึงหลักการและวิธีการที่ถูกต้องในการสร้างซอฟต์แวร์ที่มีคุณภาพและปลอดภัย.
หมายเหตุ: ข้อมูลในบทความนี้อาจจะผิด โปรดตรวจสอบความถูกต้องของบทความอีกครั้งหนึ่ง บทความนี้ไม่สามารถนำไปใช้อ้างอิงใด ๆ ได้ ทาง EPT ไม่ขอยืนยันความถูกต้อง และไม่ขอรับผิดชอบต่อความเสียหายใดที่เกิดจากบทความชุดนี้ทั้งทางทรัพย์สิน ร่างกาย หรือจิตใจของผู้อ่านและผู้เกี่ยวข้อง
หากเจอข้อผิดพลาด หรือต้องการพูดคุย ติดต่อได้ที่ https://m.me/expert.Programming.Tutor/
Tag ที่น่าสนใจ: junit unit_testing java programming software_development test-driven_development assertion exception_handling object_status_testing
หากมีข้อผิดพลาด/ต้องการพูดคุยเพิ่มเติมเกี่ยวกับบทความนี้ กรุณาแจ้งที่ http://m.me/Expert.Programming.Tutor
085-350-7540 (DTAC)
084-88-00-255 (AIS)
026-111-618
หรือทาง EMAIL: NTPRINTF@GMAIL.COM
Copyright (c) 2013 expert-programming-tutor.com. All rights reserved. | 085-350-7540 | 084-88-00-255 | ntprintf@gmail.com