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:

Tìm hiểu Backreferences trong regex của Python

Tìm hiểu Backreferences trong regex của Python

Nhóm Non-capturing trong Regex Python

Nhóm Non-capturing trong Regex Python

Các nhóm Capturing trong regex của Python

Các nhóm Capturing trong regex của Python

Sets và Ranges trong Regex của Python

Sets và Ranges trong Regex của Python

Lượng từ non-greed trong Regex của Python

Lượng từ non-greed trong Regex của Python

Chế độ Greedy trong Regex Python

Chế độ Greedy trong Regex Python

Các lượng từ trong Regex của Python

Các lượng từ trong Regex của Python

Regex Word Boundary trong Python

Regex Word Boundary trong Python

Regex với các ký tự neo trong Python

Regex với các ký tự neo trong Python

Các tập ký tự trong Regex của Python

Các tập ký tự trong Regex của Python

Biểu thức chính quy (Regex) trong Python

Biểu thức chính quy (Regex) trong Python

Tìm hiểu Context Managers trong Python

Tìm hiểu Context Managers trong Python

Biểu thức Generator trong Python

Biểu thức Generator trong Python

Tìm hiểu Generators trong Python

Tìm hiểu Generators trong Python

Sử dụng hiệu quả hàm iter() trong Python

Sử dụng hiệu quả hàm iter() trong Python

Iterator vs Iterable trong Python

Iterator vs Iterable trong Python

Tìm hiểu về Iterator trong Python

Tìm hiểu về Iterator trong Python

Dãy số Fibonacci trong Python

Dãy số Fibonacci trong Python

Cắt Chuỗi (Slicing) trong Python

Cắt Chuỗi (Slicing) trong Python

Sự khác biệt giữa Tuple và List trong Python

Sự khác biệt giữa Tuple và List trong Python

Top