7 เทส Exception และ เรื่องของเวลา

ถ้าต้องการทดสอบการส่ง Exception ก็ทำได้ง่ายๆตามโค๊ดข้างล่าง

แต่ถ้ารันตอนนี้ก็จะไม่ผ่าน

ดับเบิลคลิกที่เครื่องหมายกากาบาทสีแดง ที่หน้าต่างแสดงผลของการทดสอบ Eclipse ก็จะพาคุณไปหาโค๊ดบรรทัดที่แสดงปัญหา และตรง Failure Trace ก็จะบอกว่า java.lang.ArithmeticException : / by zero

เพราะว่ามันไม่มีความหมายในทางคณิตศาสตร์ พอไม่มีความหมาย เขาก็ไม่รู้จะสร้างซีพียูให้คำนวนการหารด้วยศูนย์ได้ยังไง จาวาจึงแสดง error ออกมากแทน แต่ถ้าเราต้องการทดสอบว่าฟังก์ชั่นนี้จะต้องได้ค่า error ออกมา ถ้าจะพูดให้ถูกกว่านี้ก็ควรว่า ได้ Exception ออกมา ในที่นี้คือ Arithmetic Exception.

วิธีเขียนเทสคือ

แล้วก็ลองรันอีกทีดูผลครับ
นอกจากนี้แล้ว คุณยังสามารถเขียนได้อีกว่า

@Test(expected = RuntimeException.class)

@Test(expected = Exception.class)

ที่เป็นแบบนี้ได้ก็เพราะว่า
ArithmeticException เป็นลูกของ RuntimeException
RuntimeException เป็นลูกของ Exception อีกที
ซึ่งก็ทำให้ ArithmeticException  เป็นหลานของ Exception  อย่างถูกกฏหมายตรงตามสำเนาทะเบียนบ้าน

สำหรับเรื่อง Interface กับเรื่อง Inheritance เราจะไม่พูดในที่นี้นะครับ ใครสงสัยตรงไหนก็สอบถามได้ตามคอมเมนต์ครับ


มาถึงเรื่องของเวลา สมมุติเราต้องการทดสอบว่าฟังก็ชั่นหนึ่งๆ สามารถทำงานให้เสร็จได้ตามเวลาที่กำหนดเป็นมิลิวินาทีได้หรือไม่ ( มิลิวินาที ก็คือ  1 / 1,000 ของวินาที ) ก็ทำได้ง่ายๆดังโค๊ดข้างล่าง


โปรแกรมนี้ไม่มีอะไรมาก แค่เราทำการสุ่มเลขมา 99999 ตัว แล้วเอาใส่ไว้ในลิส แล้วก็ เรียงลำดับ จากนั้นก็ทดสอบผลของการเรียงลำดับ โดยใช้ boolean มาวัดว่าถ้า ตัวข้างซ้าย มากกว่าตัวข้างขวา ก็แสดงว่าการเลียงลำดับผิด และสุดท้ายก็ทดสอบว่าเรียงลำดับได้ถูกหรือไม่

จากข้างบนคุณจะเห็น พารามิเตอร์ของ @Test เป็น timeout  = 400  หมายความว่าหากฟังก์ชั่นนี้ใช้เวลาเกินกว่า 400 มิลิวินาที ก็จะไม่ผ่านเทส คุณสามารถลองเปลี่ยนเป็น 100 หรือ 50 แล้วแต่สเปกเครื่องที่คุณใช้ครับ