UnitTest Framework - Exceptions Test
Khung thử nghiệm Python cung cấp các phương pháp xác nhận sau để kiểm tra xem có các ngoại lệ được đưa ra hay không.
khẳng địnhRaises (ngoại lệ, có thể gọi, * args, ** kwds)
Kiểm tra xem một ngoại lệ (đối số đầu tiên) được đưa ra khi một hàm được gọi với bất kỳ đối số vị trí hoặc từ khóa nào. Kiểm tra sẽ vượt qua nếu ngoại lệ mong đợi được nâng lên, là một lỗi nếu một ngoại lệ khác được nâng lên hoặc không thành công nếu không có ngoại lệ nào được nêu ra. Để bắt bất kỳ nhóm ngoại lệ nào, một bộ dữ liệu chứa các lớp ngoại lệ có thể được chuyển làm ngoại lệ.
Trong ví dụ dưới đây, một hàm kiểm tra được định nghĩa để kiểm tra xem ZeroDivisionError có được nâng lên hay không.
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()
Hàm testraise () sử dụng hàm khẳng định () để xem liệu phép chia cho 0 có xảy ra khi hàm div () được gọi hay không. Đoạn mã trên sẽ đưa ra một ngoại lệ. Nhưng thay đổi các đối số thành hàm div () như sau:
self.assertRaises(ZeroDivisionError, div, 1,1)
Khi mã được chạy với những thay đổi này, kiểm tra không thành công vì ZeroDivisionError không xảy ra.
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)
khẳng địnhRaisesRegexp (ngoại lệ, regexp, có thể gọi, * args, ** kwds)
Kiểm tra regexp khớp với biểu diễn chuỗi của ngoại lệ đã nêu. regexp có thể là một đối tượng biểu thức chính quy hoặc một chuỗi chứa một biểu thức chính quy phù hợp để re.search () sử dụng.
Ví dụ sau đây cho thấy cách khẳng địnhRaisesRegexp () được sử dụng:
import unittest
import re
class raiseTest(unittest.TestCase):
def testraiseRegex(self):
self.assertRaisesRegexp(TypeError, "invalid", reg,"Point","TutorialsPoint")
if __name__ == '__main__':
unittest.main()
Ở đây, kiểm tra testraseRegex () không thất bại như đối số đầu tiên. "Điểm" được tìm thấy trong chuỗi đối số thứ hai.
================================================================
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
----------------------------------------------------------------------
Tuy nhiên, thay đổi như hình dưới đây -
self.assertRaisesRegexp(TypeError, "invalid", reg,123,"TutorialsPoint")
Ngoại lệ TypeError sẽ được ném ra. Do đó, kết quả sau sẽ được hiển thị:
================================================================
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"
----------------------------------------------------------------------