Hướng dẫn PyUnit: Python Khung kiểm tra đơn vị (có ví dụ)

⚡ Tóm tắt thông minh

Python Kiểm thử đơn vị kiểm tra các đơn vị nhỏ trong mã của bạn một cách độc lập để phát hiện lỗi sớm. Ở đây, bạn sẽ tìm hiểu các kỹ thuật kiểm thử đơn vị, framework PyUnit (unittest), các lớp chính của nó, cách thiết kế một trường hợp kiểm thử và một ví dụ thực tế.

  • 🧪 Những gì nó là: Kiểm thử đơn vị xác minh các đơn vị mã nhỏ, độc lập để phát hiện lỗi sớm.
  • 🔬 Kỹ thuật: TDD, stubs và mocks giúp cô lập mã để các đơn vị có thể kiểm thử độc lập.
  • 🐍 PyUnit: PythonMô-đun kiểm thử đơn vị tích hợp sẵn của 's (PyUnit) là một phiên bản chuyển đổi của JUnit.
  • 🧱 Các lớp chính: TestCase, TestSuite, TestLoader, TextTestRunner và TestResults.
  • 🤖 Hỗ trợ từ AI: Các công cụ AI như Copilot tạo ra các trường hợp kiểm thử đơn vị ngay lập tức.

Python Kiểm tra đơn vị

Kiểm tra đơn vị là gì?

Kiểm tra đơn vị in Python được thực hiện để xác định sớm các lỗi trong giai đoạn phát triển của ứng dụng khi các lỗi ít tái diễn hơn và ít tốn kém hơn để sửa.

Kiểm thử đơn vị là kiểm thử cấp độ mã theo kịch bản được thiết kế bằng Python để xác minh một “đơn vị” chức năng nhỏ. Kiểm tra đơn vị là một khung hướng đối tượng dựa trên các thiết bị kiểm tra.

Python Kỹ thuật kiểm tra đơn vị

Python Kiểm tra đơn vị chủ yếu liên quan đến việc kiểm tra một mô-đun cụ thể mà không cần truy cập bất kỳ mã phụ thuộc nào. Các nhà phát triển có thể sử dụng các kỹ thuật như sơ khai và mô phỏng để tách mã thành các “đơn vị” và chạy thử nghiệm cấp đơn vị trên từng phần riêng lẻ.

  • TDD phát triển dựa trên thử nghiệm: Kiểm tra đơn vị nên được thực hiện cùng với Pythonvà để làm được điều đó, các nhà phát triển sẽ sử dụng phương pháp Phát triển dựa trên thử nghiệm. Trong phương pháp TDD, trước tiên bạn thiết kế Python Kiểm tra đơn vị và chỉ sau đó bạn mới tiếp tục viết mã sẽ triển khai tính năng này.
  • Sơ khai và giả: Chúng là hai kỹ thuật chính mô phỏng các phương pháp giả đang được thử nghiệm. MỘT Stub được sử dụng để điền vào một số phụ thuộc cần thiết để kiểm tra đơn vị chạy chính xác. MỘT Chế nhạo mặt khác là một đối tượng giả chạy các bài kiểm tra mà chúng tôi đặt khẳng định.

    Mục đích của cả hai phương pháp đều giống nhau là loại bỏ việc kiểm tra tất cả các phần phụ thuộc của một lớp hoặc hàm.

Python Khung kiểm tra đơn vị

Để làm cho quá trình Kiểm tra đơn vị dễ dàng hơn và cải thiện chất lượng dự án của bạn, bạn nên sử dụng Python Khung kiểm tra đơn vị. Khung kiểm tra đơn vị bao gồm

Python Kỹ thuật kiểm tra đơn vị

  • PyUnit: PyUnit hỗ trợ các thiết bị cố định, trường hợp thử nghiệm, bộ thử nghiệm và trình chạy thử nghiệm để kiểm tra mã tự động. Trong PyUnit, bạn có thể sắp xếp các trường hợp thử nghiệm thành các bộ có cùng đồ đạc
  • Mũi: Các plug-in tích hợp của Nose giúp bạn thu thập đầu ra, bao quát mã, tài liệu, v.v. Cú pháp của Nose khá đơn giản hơn và giảm bớt các rào cản đối với việc viết bài kiểm tra. Nó mở rộng Python unittest để làm cho việc kiểm tra dễ dàng hơn.
  • Bác sĩ : Tập lệnh kiểm tra Doctest có dạng chuỗi doc với chức năng nhỏ ở cuối tệp. Doctest cho phép bạn kiểm tra mã của mình bằng cách chạy các ví dụ có trong tài liệu và xác minh rằng chúng trả về kết quả mong đợi. Trường hợp sử dụng doctest ít chi tiết hơn và không nắm bắt được các trường hợp đặc biệt. Chúng hữu ích như một tài liệu biểu đạt về trường hợp sử dụng chính của mô-đun và các thành phần của nó.

Kiểm tra đơn vị với PyUnit

Pyunit là một Python cảng JUnit. Là một phần của Pyunit, trong mô-đun unittest có năm lớp chính.

Kiểm tra đơn vị với PyUnit

  • Lớp TestCase: Lớp TestCase mang các quy trình kiểm tra và cung cấp các móc nối để thực hiện từng quy trình và dọn dẹp sau đó
  • Lớp TestSuite: Nó phục vụ như một thùng chứa bộ sưu tập và nó có thể chứa nhiều đối tượng testcase và nhiều đối tượng testsuites
  • Lớp TestLoader: Lớp này tải các trường hợp và bộ thử nghiệm được xác định cục bộ hoặc từ một tệp bên ngoài. Nó phát ra một đối tượng testsuite sở hữu các bộ và trường hợp đó
  • Lớp TextTestRunner: Để chạy thử nghiệm, nó cung cấp một nền tảng tiêu chuẩn để thực hiện thử nghiệm
  • Lớp TestResults: Nó cung cấp một thùng chứa tiêu chuẩn cho kết quả kiểm tra

Thiết kế một trường hợp thử nghiệm cho Python Kiểm tra bằng PyUnit

Kiểm thử đơn vị cung cấp một lớp cơ sở, trường hợp kiểm thử, có thể được sử dụng để tạo trường hợp kiểm thử mới. Để thiết kế trường hợp thử nghiệm, có ba bộ phương pháp được sử dụng là

Thiết kế một trường hợp thử nghiệm cho Python

unittest.TestCase

setUp()
teardown()

skipTest(aMesg:string)
fail(aMesg:string)

id():string
shortDescription():string

Trong bộ đầu tiên là các móc kiểm tra trước và sau. Phương thức setup() bắt đầu trước mỗi quy trình kiểm tra, phương thức Tears() bắt đầu sau quy trình này.

Nhóm phương pháp thứ hai kiểm soát việc thực hiện kiểm thử. Cả hai phương pháp đều lấy chuỗi thông báo làm đầu vào và đều hủy quá trình kiểm tra đang diễn ra. Nhưng phương thức Skiptest() hủy bỏ thử nghiệm hiện tại trong khi phương thức Fail() thất bại hoàn toàn.

Phương pháp cuối cùng hoặc thứ ba giúp xác định bài kiểm tra. Phương thức id() trả về một chuỗi bao gồm tên của đối tượng testcase và quy trình kiểm tra. Và phương pháp ngắn gọnDescription() trả về nhận xét doctr khi bắt đầu mỗi quy trình kiểm tra.

Python Ví dụ về kiểm thử đơn vị

Ví dụ dưới đây kiểm tra một hàm add() đơn giản bằng mô-đun unittest. Mỗi phương thức được đặt tên với tiền tố test_ sẽ tự động chạy, và assertEqual sẽ kiểm tra kết quả so với giá trị mong đợi.

import unittest

def add(a, b):
    return a + b

class TestAdd(unittest.TestCase):
    def test_add_positive(self):
        self.assertEqual(add(2, 3), 5)

    def test_add_negative(self):
        self.assertEqual(add(-1, -1), -2)

if __name__ == "__main__":
    unittest.main()

Lưu mã và chạy bằng lệnh `python filename.py`. Trình chạy kiểm thử đơn vị sẽ báo cáo số lượng bài kiểm thử đã vượt qua hoặc thất bại.

Ưu điểm của việc sử dụng Python Kiểm tra đơn vị

  • Nó giúp bạn phát hiện lỗi sớm trong chu kỳ phát triển
  • Nó giúp bạn viết chương trình tốt hơn
  • Nó đồng bộ dễ dàng với các phương pháp và công cụ thử nghiệm khác
  • Nó sẽ có ít lỗi hơn
  • Việc sửa đổi trong tương lai sẽ dễ dàng hơn với rất ít hậu quả

Câu Hỏi Thường Gặp

Kiểm thử đơn vị xác minh một đoạn mã nhỏ, chẳng hạn như một hàm, một cách độc lập. Nó giúp phát hiện lỗi sớm trong quá trình phát triển, khi việc sửa lỗi còn dễ dàng và tiết kiệm chi phí hơn.

PyUnit là PythonKhung kiểm thử đơn vị tích hợp sẵn của hệ điều hành, có sẵn dưới dạng mô-đun unittest. Đây là bản chuyển đổi từ... JUnit và hỗ trợ các thiết lập, trường hợp thử nghiệm, bộ thử nghiệm và trình chạy thử nghiệm.

Tạo lớp con của unittest.TestCase, viết các phương thức bắt đầu bằng test_, và sử dụng các câu lệnh khẳng định như assertEqual bên trong chúng. Chạy tập tin bằng unittest.main() để thực hiện tất cả các bài kiểm tra.

Hàm `setUp()` chạy trước mỗi phương thức kiểm thử để chuẩn bị các fixture, trong khi hàm `tearDown()` chạy sau mỗi bài kiểm thử để dọn dẹp. Cả hai hàm này cùng nhau giúp các bài kiểm thử độc lập và có thể lặp lại.

Stubs cung cấp dữ liệu cố định mà một bài kiểm tra phụ thuộc vào, trong khi mocks là các đối tượng giả mà bạn sử dụng để kiểm tra. Cả hai đều thay thế các phụ thuộc thực tế để một đơn vị được kiểm thử một cách độc lập.

Các trợ lý AI như GitHub Copilot tạo ra các trường hợp kiểm thử đơn vị từ một hàm, đề xuất các trường hợp ngoại lệ và khẳng định, đồng thời tạo ra các đối tượng giả lập cho các phụ thuộc khi bạn viết mã.

Đúng vậy. Các công cụ hỗ trợ bởi trí tuệ nhân tạo có thể tự động tạo bộ kiểm thử, đưa ra các khẳng định cho kết quả mong đợi và tăng độ bao phủ mã bằng cách đề xuất các bài kiểm thử cho các nhánh chưa được kiểm thử.

unittest là Python's sử dụng framework tích hợp sẵn với các lớp và phương thức assert, trong khi pytest là thư viện bên thứ ba với các câu lệnh assert đơn giản hơn và các fixture mạnh mẽ. Cả hai đều chạy kiểm thử đơn vị.

Tóm tắt bài viết này với: