UnitTest Framework - Bỏ qua kiểm tra
Hỗ trợ bỏ qua các bài kiểm tra đã được thêm vào kể từ Python 2.7. Có thể bỏ qua phương pháp kiểm tra riêng lẻ hoặc lớp TestCase, có điều kiện cũng như vô điều kiện. Khuôn khổ cho phép một thử nghiệm nhất định được đánh dấu là 'thất bại dự kiến'. Thử nghiệm này sẽ 'thất bại' nhưng sẽ không được tính là không thành công trong TestResult.
Để bỏ qua một phương thức vô điều kiện, phương thức lớp unittest.skip () sau có thể được sử dụng:
import unittest
def add(x,y):
return x+y
class SimpleTest(unittest.TestCase):
@unittest.skip("demonstrating skipping")
def testadd1(self):
self.assertEquals(add(4,5),9)
if __name__ == '__main__':
unittest.main()
Vì bỏ qua () là một phương thức của lớp, nó có tiền tố là @ token. Phương thức nhận một đối số: một thông báo nhật ký mô tả lý do bỏ qua.
Khi tập lệnh trên được thực thi, kết quả sau được hiển thị trên bảng điều khiển:
C:\Python27>python skiptest.py
s
----------------------------------------------------------------------
Ran 1 test in 0.000s
OK (skipped = 1)
Ký tự 's' chỉ ra rằng một bài kiểm tra đã bị bỏ qua.
Cú pháp thay thế cho việc bỏ qua kiểm tra là sử dụng phương thức instance jumpTest () bên trong hàm kiểm tra.
def testadd2(self):
self.skipTest("another method for skipping")
self.assertTrue(add(4 + 5) == 10)
Các trình trang trí sau thực hiện bỏ qua thử nghiệm và các lỗi dự kiến:
Không. | Phương pháp & Mô tả |
---|---|
1 | unittest.skip(reason) Bỏ qua bài kiểm tra được trang trí một cách vô điều kiện. lý do nên mô tả lý do tại sao thử nghiệm bị bỏ qua. |
2 | unittest.skipIf(condition, reason) Bỏ qua thử nghiệm trang trí nếu điều kiện là đúng. |
3 | unittest.skipUnless(condition, reason) Bỏ qua thử nghiệm được trang trí trừ khi điều kiện là đúng. |
4 | unittest.expectedFailure() Đánh dấu bài kiểm tra là một thất bại dự kiến. Nếu thử nghiệm không đạt khi chạy, thử nghiệm không được tính là thất bại. |
Ví dụ sau minh họa việc sử dụng bỏ qua có điều kiện và thất bại dự kiến.
import unittest
class suiteTest(unittest.TestCase):
a = 50
b = 40
def testadd(self):
"""Add"""
result = self.a+self.b
self.assertEqual(result,100)
@unittest.skipIf(a>b, "Skip over this routine")
def testsub(self):
"""sub"""
result = self.a-self.b
self.assertTrue(result == -10)
@unittest.skipUnless(b == 0, "Skip over this routine")
def testdiv(self):
"""div"""
result = self.a/self.b
self.assertTrue(result == 1)
@unittest.expectedFailure
def testmul(self):
"""mul"""
result = self.a*self.b
self.assertEqual(result == 0)
if __name__ == '__main__':
unittest.main()
Trong ví dụ trên, testsub () và testdiv () sẽ bị bỏ qua. Trong trường hợp đầu tiên a> b là đúng, trong khi trong trường hợp thứ hai b == 0 là không đúng. Mặt khác, testmul () đã được đánh dấu là thất bại mong đợi.
Khi tập lệnh trên được chạy, hai thử nghiệm bị bỏ qua hiển thị là 's' và lỗi dự kiến được hiển thị là 'x'.
C:\Python27>python skiptest.py
Fsxs
================================================================
FAIL: testadd (__main__.suiteTest)
Add
----------------------------------------------------------------------
Traceback (most recent call last):
File "skiptest.py", line 9, in testadd
self.assertEqual(result,100)
AssertionError: 90 != 100
----------------------------------------------------------------------
Ran 4 tests in 0.000s
FAILED (failures = 1, skipped = 2, expected failures = 1)