PYTHON UNIT TESTING
CÁC CHỦ ĐỀ
BÀI MỚI NHẤT
MỚI CẬP NHẬT

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é!

test php

banquyen png
Bài viết này được đăng tại freetuts.net, không được copy dưới mọi hình thức.

Giới thiệu về Fixture trong Kiểm thử Python

Ph C6 B0 C6 A1ng 20th E1 BB A9c 20assert   20trong 20Python 20 1  png

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!

Cùng chuyên mục:

Hướng dẫn xây dựng Command-Line Interface (CLI) bằng Quo trong Python

Hướng dẫn xây dựng Command-Line Interface (CLI) bằng Quo trong Python

Hướng dẫn toàn diện về module datetime trong Python

Hướng dẫn toàn diện về module datetime trong Python

Cách truy cập và thiết lập biến môi trường trong Python

Cách truy cập và thiết lập biến môi trường trong Python

Lớp dữ liệu (Data Classes) trong Python với decorator @dataclass

Lớp dữ liệu (Data Classes) trong Python với decorator @dataclass

Từ khóa yield trong Python

Từ khóa yield trong Python

Sự khác biệt giữa sort() và sorted() trong Python

Sự khác biệt giữa sort() và sorted() trong Python

Sử dụng Poetry để quản lý dependencies trong Python

Sử dụng Poetry để quản lý dependencies trong Python

Định dạng chuỗi Strings trong Python

Định dạng chuỗi Strings trong Python

Một tác vụ phổ biến khi làm việc với danh sách trong Python

Một tác vụ phổ biến khi làm việc với danh sách trong Python

Làm việc với các biến môi trường trong Python

Làm việc với các biến môi trường trong Python

Sự khác biệt giữa set() và frozenset() trong Python

Sự khác biệt giữa set() và frozenset() trong Python

Sự khác biệt giữa iterator và iterable trong Python

Sự khác biệt giữa iterator và iterable trong Python

Cách làm việc với file tarball/tar trong Python

Cách làm việc với file tarball/tar trong Python

Chuyển đổi kiểu dữ liệu trong Python

Chuyển đổi kiểu dữ liệu trong Python

Sự khác biệt giữa toán tử == và is trong Python

Sự khác biệt giữa toán tử == và is trong Python

Làm việc với file ZIP trong Python

Làm việc với file ZIP trong Python

Cách sử dụng ThreadPoolExecutor trong Python

Cách sử dụng ThreadPoolExecutor trong Python

Sự khác biệt giữa byte objects và string trong Python

Sự khác biệt giữa byte objects và string trong Python

Xử lý độ chính xác các hàm floor, ceil, round, trunc, format  trong Python

Xử lý độ chính xác các hàm floor, ceil, round, trunc, format trong Python

Cách lặp qua nhiều list với hàm zip() trong Python

Cách lặp qua nhiều list với hàm zip() trong Python

Top