Thông báo: Download 4 khóa học Python từ cơ bản đến nâng cao tại đây.
Sử dụng Test Fixtures trong Python
Trong quá trình phát triển phần mềm, việc kiểm thử là một phần không thể thiếu để đảm bảo tính ổn định và chất lượng của ứng dụng. Trong Python, mình có các fixture để chuẩn bị môi trường cần thiết trước khi thực hiện kiểm thử và dọn dẹp sau khi hoàn thành. Trong bài viết này, mình sẽ tìm hiểu về các loại fixture trong kiểm thử Python và cách sử dụng chúng để viết các kiểm thử hiệu quả và dễ bảo trì. Hãy cùng tìm hiểu nhé!
Giới thiệu về Fixture trong Kiểm thử Python
Fixture trong kiểm thử là một hàm hoặc phương thức chạy trước và sau khi một khối mã kiểm thử được thực thi. Nói cách khác, đó là một bước được thực hiện trước hoặc sau một kiểm thử.
Fixture ở cấp độ module
Giả sử bạn có một module kiểm thử gọi là test_my_module.py. Trong test_my_module.py, các hàm setUpModule() và tearDownModule() là các fixture ở cấp độ module.
- Hàm setUpModule() chạy trước tất cả các phương thức kiểm thử trong module kiểm thử.
- Hàm tearDownModule() chạy sau tất cả các phương thức trong module kiểm thử.
Xem ví dụ sau:
Bài viết này được đăng tại [free tuts .net]
import unittest def setUpModule(): print('Đang chạy setUpModule') def tearDownModule(): print('Đang chạy tearDownModule') class TestMyModule(unittest.TestCase): def test_case_1(self): self.assertEqual(5+5, 10) def test_case_2(self): self.assertEqual(1+1, 2)
Nếu bạn chạy kiểm thử:
python -m unittest -v
Kết quả sẽ là:
Đang chạy setUpModule test_case_1 (test_my_module.TestMyModule) ... ok test_case_2 (test_my_module.TestMyModule) ... ok Đang chạy tearDownModule ---------------------------------------------------------------------- Ran 2 tests in 0.001s OK
Trong ví dụ này, hàm setUpModule() chạy trước tất cả các phương thức kiểm thử và hàm tearDownModule() chạy sau tất cả các phương thức kiểm thử.
Fixture ở cấp độ lớp
Hàm setUpClass() và tearDownClass() là các fixture ở cấp độ lớp:
- Hàm setUpClass() chạy trước tất cả các phương thức kiểm thử của một lớp.
- Hàm tearDownClass() chạy sau tất cả các phương thức kiểm thử của một lớp.
Ví dụ:
import unittest def setUpModule(): print('Đang chạy setUpModule') def tearDownModule(): print('Đang chạy tearDownModule') class TestMyModule(unittest.TestCase): @classmethod def setUpClass(cls): print('Đang chạy setUpClass') @classmethod def tearDownClass(cls): print('Đang chạy tearDownClass') def test_case_1(self): self.assertEqual(5+5, 10) def test_case_2(self): self.assertEqual(1+1, 2)
Nếu bạn chạy kiểm thử, bạn sẽ thấy kết quả như sau:
Đang chạy setUpModule Đang chạy setUpClass test_case_1 (test_my_module.TestMyModule) ... ok test_case_2 (test_my_module.TestMyModule) ... ok Đang chạy tearDownClass Đang chạy tearDownModule ---------------------------------------------------------------------- Ran 2 tests in 0.001s OK
Fixture ở cấp độ phương thức
Hàm setUp() và tearDown() là các fixture ở cấp độ phương thức:
- Hàm setUp() chạy trước mỗi phương thức kiểm thử trong một lớp kiểm thử.
- Hàm tearDown() chạy sau mỗi phương thức kiểm thử trong một lớp kiểm thử.
Ví dụ:
import unittest def setUpModule(): print('Đang chạy setUpModule') def tearDownModule(): print('Đang chạy tearDownModule') class TestMyModule(unittest.TestCase): @classmethod def setUpClass(cls): print('Đang chạy setUpClass') @classmethod def tearDownClass(cls): print('Đang chạy tearDownClass') def setUp(self): print('') print('Đang chạy setUp') def tearDown(self): print('Đang chạy tearDown') def test_case_1(self): print('Đang chạy test_case_1') self.assertEqual(5+5, 10) def test_case_2(self): print('Đang chạy test_case_2') self.assertEqual(1+1, 2)
Kết quả của kiểm thử sẽ là:
Đang chạy setUpModule Đang chạy setUpClass Đang chạy setUp Đang chạy test_case_1 Đang chạy tearDown . Đang chạy setUp Đang chạy test_case_2 Đang chạy tearDown . Đang chạy tearDownClass Đang chạy tearDownModule ---------------------------------------------------------------------- Ran 2 tests in 0.002s OK
Trong ví dụ này, hàm setUp() và tearDown() chạy trước và sau mỗi phương thức kiểm thử, bao gồm test_case_1() và test_case_2().
Kết bài
Trong bài viết này, mình đã tìm hiểu về các fixture trong kiểm thử Python, bao gồm setUp(), tearDown(), setUpClass(), tearDownClass(), setUpModule() và tearDownModule(). Các fixture này giúp chuẩn bị môi trường cần thiết trước khi thực hiện kiểm thử và dọn dẹp sau khi hoàn thành, giúp việc viết các kiểm thử trở nên dễ dàng và hiệu quả hơn.
Việc sử dụng fixture giúp mình tái sử dụng code, giảm thiểu sự lặp lại và tạo ra các kiểm thử linh hoạt và dễ bảo trì. Hi vọng bài viết này đã cung cấp cho bạn cái nhìn tổng quan và kiến thức cần thiết để bắt đầu sử dụng fixture trong quá trình kiểm thử của mình. Hãy áp dụng những kiến thức này vào công việc của bạn và tạo ra các kiểm thử chất lượng cho ứng dụng của mình. Chúc bạn thành công!