Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Python

Unit Testing trong Python với Module unittest: Hướng Dẫn Cơ Bản

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 == b
  • assertNotEqual(a, b): a != b
  • assertTrue(x): x là True
  • assertFalse(x): x là False
  • assertIsNone(x): x is None
  • assertRaises(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...).