Unit Testing là kiểm thử từng đơn vị nhỏ (function, method) độc lập. Module unittest tích hợp sẵn trong Python cung cấp framework testing chuẩn.
Cấu trúc cơ bản
import unittest
class SampleTest(unittest.TestCase):
def test_example(self):
self.assertTrue(True)
if __name__ == '__main__':
unittest.main()
Quy tắc: Tên method test phải bắt đầu bằng test_.
Các assertion thường dùng
assertEqual(a, b): a == bassertNotEqual(a, b): a != bassertTrue(x): x là TrueassertFalse(x): x là FalseassertIsNone(x): x is NoneassertRaises(Error, func): func ném Error
Ví dụ: Test phương thức chuỗi
import unittest
class TestingStringMethods(unittest.TestCase):
def test_string_equality(self):
self.assertEqual('ttp' * 5, 'ttpttpttpttpttp')
def test_string_case(self):
self.assertEqual('tutorialspoint'.upper(), 'TUTORIALSPOINT')
def test_is_string_upper(self):
self.assertTrue('TUTORIALSPOINT'.isupper())
self.assertFalse('TUTORIALSpoint'.isupper())
if __name__ == '__main__':
unittest.main()
Kết quả chạy test
Tất cả pass:
...
----------------------------------------------------------------------
Ran 3 tests in 0.001s
OK
Có test fail:
======================================================================
FAIL: test_is_string_upper (__main__.TestingStringMethods)
----------------------------------------------------------------------
Traceback (most recent call last):
File "test.py", line 21, in test_is_string_upper
self.assertTrue('TUTORIALSPOINt'.isupper())
AssertionError: False is not true
----------------------------------------------------------------------
Ran 3 tests in 0.016s
FAILED (failures=1)
Chạy test từ command line
python -m unittest test_module.py
python -m unittest TestClass.test_method
Kết luận
Viết unit test giúp phát hiện bug sớm, refactor an tâm. unittest đủ mạnh cho hầu hết dự án; có thể mở rộng với pytest cho tính năng nâng cao (fixtures, parametrize, plugin...).