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:

Cách tạo một widget nhập ngày và giờ sử dụng PyQt QDateTimeEdit

Cách tạo một widget nhập ngày và giờ sử dụng PyQt QDateTimeEdit

Cách tạo một widget nhập giờ sử dụng lớp PyQt QTimeEdit

Cách tạo một widget nhập giờ sử dụng lớp PyQt QTimeEdit

Cách tạo một widget nhập ngày sử dụng lớp PyQt QDateEdit

Cách tạo một widget nhập ngày sử dụng lớp PyQt QDateEdit

Cách sử dụng widget PyQt QSpinBox để tạo một spin box

Cách sử dụng widget PyQt QSpinBox để tạo một spin box

Sử dụng PyQt QComboBox để tạo Widget Combobox

Sử dụng PyQt QComboBox để tạo Widget Combobox

Cách sử dụng lớp PyQt QRadioButton

Cách sử dụng lớp PyQt QRadioButton

Cách sử dụng lớp QCheckBox trong PyQt

Cách sử dụng lớp QCheckBox trong PyQt

Cách sử dụng QFormLayout trong PyQt

Cách sử dụng QFormLayout trong PyQt

Cách sử dụng QGridLayout trong PyQt

Cách sử dụng QGridLayout trong PyQt

Cách sử dụng QVBoxLayout trong PyQt

Cách sử dụng QVBoxLayout trong PyQt

Cách sử dụng widget QLineEdit trong PyQt

Cách sử dụng widget QLineEdit trong PyQt

Cách sử dụng widget QPushButton của PyQt

Cách sử dụng widget QPushButton của PyQt

Cách sử dụng widget PyQt QLabel

Cách sử dụng widget PyQt QLabel

Tín hiệu và Khe (Signals & Slots) trong PyQt

Tín hiệu và Khe (Signals & Slots) trong PyQt

PyQt là gì? Tạo một chương trình

PyQt là gì? Tạo một chương trình "Hello World".

Ứng dụng System Tray với Tkinter

Ứng dụng System Tray với Tkinter

Cách hiển thị đồ thị từ thư viện Matplotlib trong Tkinter

Cách hiển thị đồ thị từ thư viện Matplotlib trong Tkinter

Cách sử dụng Validate trong Tkinter

Cách sử dụng Validate trong Tkinter

Cấu trúc MVC trong Tkinter

Cấu trúc MVC trong Tkinter

Cách sử dụng widget PhotoImage của Tkinter

Cách sử dụng widget PhotoImage của Tkinter

Top