Unit Test Trong Python: Hướng Dẫn Chi Tiết

Đăng ngày: 20/06/2026 • Tác giả: Quản trị viên
Unit Test Trong Python: Hướng Dẫn Chi Tiết

Unit Test Trong Python: Hướng Dẫn Chi Tiết

📌 Nội dung chính:

1️⃣ Unit Test là gì?
2️⃣ Tại sao cần viết Unit Test?
3️⃣ Các công cụ Unit Test trong Python
4️⃣ Viết Unit Test với unittest
5️⃣ Viết Unit Test với pytest
6️⃣ Mocking trong Unit Test
7️⃣ Tích hợp Unit Test vào CI/CD

1. Unit Test là gì?

💡 Unit Test (Kiểm thử đơn vị) là quá trình kiểm thử từng đơn vị nhỏ nhất của code (hàm, class, module) để đảm bảo chúng hoạt động đúng như mong đợi.

🚀 Mục tiêu của Unit Test:

  • Kiểm tra tính đúng đắn của từng thành phần.
  • Phát hiện lỗi sớm trong quá trình phát triển.
  • Giúp code dễ bảo trì, mở rộng.
  • Tự động hóa kiểm thử, giảm lỗi do con người.

2. Tại sao cần viết Unit Test?

✅ Giúp phát hiện lỗi sớm trước khi code được đưa vào hệ thống.
✅ Đảm bảo các chức năng hoạt động chính xác sau khi chỉnh sửa code.
✅ Giúp tự tin refactor code mà không sợ phá vỡ chức năng cũ.
✅ Tiết kiệm thời gian kiểm thử thủ công.

📌 Ví dụ thực tế:
Giả sử bạn có một hàm tính tổng:

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

Nếu không có Unit Test, bạn phải chạy thủ công nhiều lần để kiểm tra. Nhưng nếu có Unit Test, chỉ cần chạy pytest hoặc unittest là đủ.

3. Các công cụ Unit Test trong Python

Python có nhiều công cụ để viết Unit Test:
🔹 unittest (có sẵn trong Python)
🔹 pytest (dễ dùng, hỗ trợ nhiều tính năng hơn)
🔹 nose2 (mở rộng từ unittest)

📌 Công cụ khuyên dùng: pytest vì đơn giản, dễ đọc, dễ mở rộng.

4. Viết Unit Test với unittest

unittest là framework kiểm thử có sẵn trong Python.

👉 Cài đặt (Python đã có sẵn unittest, không cần cài thêm).

Ví dụ 1: Test Hàm Đơn Giản

import unittest

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

class TestMath(unittest.TestCase):
    def test_add(self):
        self.assertEqual(add(2, 3), 5)  # Kiểm tra 2 + 3 = 5
        self.assertEqual(add(-1, 1), 0)  # Kiểm tra -1 + 1 = 0

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

📌 Giải thích:

  • unittest.TestCase: Định nghĩa một bộ kiểm thử.
  • self.assertEqual(): So sánh kết quả với giá trị mong đợi.

✅ Chạy Unit Test:

python test_math.py

Ví dụ 2: Test Class

import unittest

class Calculator:
    def add(self, a, b):
        return a + b

class TestCalculator(unittest.TestCase):
    def setUp(self):  # Chạy trước mỗi test
        self.calculator = Calculator()

    def test_add(self):
        self.assertEqual(self.calculator.add(2, 3), 5)

    def tearDown(self):  # Chạy sau mỗi test
        del self.calculator

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

📌 Giải thích:

  • setUp(): Chuẩn bị dữ liệu trước mỗi test.
  • tearDown(): Dọn dẹp sau mỗi test.

5. Viết Unit Test với pytest

🔥 pytest dễ dùng hơn unittest và hỗ trợ nhiều tính năng mạnh mẽ.

👉 Cài đặt pytest

pip install pytest

👉 Viết Unit Test đơn giản với pytest

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

def test_add():
    assert add(2, 3) == 5
    assert add(-1, 1) == 0

✅ Chạy test với pytest:

pytest test_math.py

📌 Lợi ích của pytest:
✔ Không cần kế thừa class unittest.TestCase.
✔ Sử dụng assert thay vì self.assertEqual().

6. Mocking trong Unit Test

Mocking là kỹ thuật dùng đối tượng giả thay thế đối tượng thật khi test.

👉 Ví dụ: Mock API Call

import requests
from unittest.mock import patch

def get_user():
    response = requests.get("https://api.example.com/user")
    return response.json()

def test_get_user():
    with patch('requests.get') as mock_get:
        mock_get.return_value.json.return_value = {"name": "Thảo"}
        assert get_user() == {"name": "Thảo"}

📌 Lợi ích của Mocking:
✔ Test nhanh hơn, không cần gọi API thật.
✔ Kiểm soát dữ liệu đầu vào của test.

7. Tích hợp Unit Test vào CI/CD

Unit Test có thể được tích hợp vào CI/CD pipeline để tự động kiểm tra code trước khi deploy.

Tích hợp Unit Test với GitHub Actions

📌 Tạo file .github/workflows/test.yml

name: Run Unit Tests
on: [push]
jobs:
  test:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout code
        uses: actions/checkout@v2

      - name: Setup Python
        uses: actions/setup-python@v2
        with:
          python-version: '3.10'

      - name: Install dependencies
        run: pip install pytest

      - name: Run tests
        run: pytest

📌 Lợi ích:
✔ Tự động chạy Unit Test khi push code.
✔ Báo lỗi ngay lập tức nếu test thất bại.

8. Khi Nào Nên Viết Unit Test?

✅ Khi viết hàm tính toán quan trọng.
✅ Khi có chức năng phức tạp, dễ lỗi.
✅ Khi làm việc trong nhóm (giúp tránh bug khi nhiều người sửa code).

🚨 Không cần viết Unit Test nếu:
❌ Hàm quá đơn giản (chỉ return giá trị cố định).
❌ Code chỉ chạy một lần và không dùng lại.

9. Tổng Kết

✔ Unit Test giúp kiểm tra code chính xác, tránh lỗi khi phát triển.
✔ Dùng unittest cho dự án nhỏ, pytest cho dự án lớn.
✔ Mocking giúp kiểm thử nhanh hơn, không cần gọi API thật.
✔ Tích hợp Unit Test vào CI/CD giúp tự động kiểm tra code trước khi deploy.

 

💡 Bạn có câu hỏi gì về Unit Test? Hãy để lại bình luận bên dưới!

Bài viết liên quan