UnitTest Framework - การทดสอบข้อยกเว้น
กรอบการทดสอบ Python มีวิธีการยืนยันดังต่อไปนี้เพื่อตรวจสอบว่ามีการเพิ่มข้อยกเว้น
assertRaises (ข้อยกเว้น, callable, * args, ** kwds)
ทดสอบว่ามีการยกข้อยกเว้น (อาร์กิวเมนต์แรก) ขึ้นเมื่อฟังก์ชันถูกเรียกใช้ด้วยอาร์กิวเมนต์ตำแหน่งหรือคีย์เวิร์ด การทดสอบจะผ่านไปหากมีการเพิ่มข้อยกเว้นที่คาดไว้ซึ่งเป็นข้อผิดพลาดหากมีการเพิ่มข้อยกเว้นอื่นหรือล้มเหลวหากไม่มีการเพิ่มข้อยกเว้น หากต้องการจับกลุ่มข้อยกเว้นใด ๆ ทูเปิลที่มีคลาสข้อยกเว้นอาจถูกส่งผ่านเป็นข้อยกเว้น
ในตัวอย่างด้านล่างมีการกำหนดฟังก์ชันการทดสอบเพื่อตรวจสอบว่า ZeroDivisionError ถูกยกขึ้นหรือไม่
import unittest
def div(a,b):
return a/b
class raiseTest(unittest.TestCase):
def testraise(self):
self.assertRaises(ZeroDivisionError, div, 1,0)
if __name__ == '__main__':
unittest.main()
ฟังก์ชัน testraise () ใช้ฟังก์ชัน assertRaises () เพื่อดูว่าการหารด้วยศูนย์เกิดขึ้นหรือไม่เมื่อฟังก์ชัน div () ถูกเรียกใช้ รหัสข้างต้นจะทำให้เกิดข้อยกเว้น แต่เปลี่ยนอาร์กิวเมนต์เป็นฟังก์ชัน div () ดังนี้ -
self.assertRaises(ZeroDivisionError, div, 1,1)
เมื่อมีการเรียกใช้รหัสพร้อมกับการเปลี่ยนแปลงเหล่านี้การทดสอบจะล้มเหลวเนื่องจาก ZeroDivisionError ไม่เกิดขึ้น
F
================================================================
FAIL: testraise (__main__.raiseTest)
----------------------------------------------------------------------
Traceback (most recent call last):
File "raisetest.py", line 7, in testraise
self.assertRaises(ZeroDivisionError, div, 1,1)
AssertionError: ZeroDivisionError not raised
----------------------------------------------------------------------
Ran 1 test in 0.000s
FAILED (failures = 1)
assertRaisesRegexp (ข้อยกเว้น, regexp, callable, * args, ** kwds)
การทดสอบที่regexpตรงกับการแสดงสตริงของข้อยกเว้นที่เพิ่มขึ้น regexp อาจเป็นอ็อบเจ็กต์นิพจน์ทั่วไปหรือสตริงที่มีนิพจน์ทั่วไปที่เหมาะสำหรับใช้โดย re.search ()
ตัวอย่างต่อไปนี้แสดงวิธีการใช้ assertRaisesRegexp () -
import unittest
import re
class raiseTest(unittest.TestCase):
def testraiseRegex(self):
self.assertRaisesRegexp(TypeError, "invalid", reg,"Point","TutorialsPoint")
if __name__ == '__main__':
unittest.main()
ที่นี่การทดสอบ testraseRegex () ไม่ล้มเหลวเป็นอาร์กิวเมนต์แรก พบ "Point" ในสตริงอาร์กิวเมนต์ที่สอง
================================================================
FAIL: testraiseRegex (__main__.raiseTest)
----------------------------------------------------------------------
Traceback (most recent call last):
File "C:/Python27/raiseTest.py", line 11, in testraiseRegex
self.assertRaisesRegexp(TypeError, "invalid", reg,"Point","TutorialsPoint")
AssertionError: TypeError not raised
----------------------------------------------------------------------
อย่างไรก็ตามการเปลี่ยนแปลงดังแสดงด้านล่าง -
self.assertRaisesRegexp(TypeError, "invalid", reg,123,"TutorialsPoint")
ข้อยกเว้น TypeError จะถูกโยนทิ้ง ดังนั้นผลลัพธ์ต่อไปนี้จะปรากฏขึ้น -
================================================================
FAIL: testraiseRegex (__main__.raiseTest)
----------------------------------------------------------------------
Traceback (most recent call last):
File "raisetest.py", line 11, in testraiseRegex
self.assertRaisesRegexp(TypeError, "invalid", reg,123,"TutorialsPoint")
AssertionError: "invalid" does not match
"first argument must be string or compiled pattern"
----------------------------------------------------------------------