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 Unittest Coverage trong Python
Trong bài viết này, bạn sẽ học cách sử dụng lệnh coverage của unittest trong Python để tạo báo cáo về độ bao phủ kiểm thử. Độ bao phủ kiểm thử là một chỉ số quan trọng giúp đánh giá mức độ mà bộ kiểm thử của bạn đã kiểm tra mã nguồn. Bằng cách sử dụng công cụ coverage, bạn có thể xác định các phần của mã nguồn chưa được kiểm thử và cải thiện chất lượng kiểm thử của mình. Hướng dẫn này sẽ chỉ cho bạn từng bước cụ thể để tạo báo cáo độ bao phủ kiểm thử, giúp bạn có cái nhìn toàn diện và chi tiết về hiệu quả của các bài kiểm thử hiện tại.

Độ bao phủ kiểm thử là gì?
Độ bao phủ kiểm thử là tỷ lệ giữa số dòng mã được thực thi ít nhất một lần bởi một trường hợp kiểm thử và tổng số dòng mã của toàn bộ mã nguồn:
độ bao phủ kiểm thử = số dòng mã được thực thi / tổng số dòng mã
Độ bao phủ kiểm thử thường được sử dụng để đánh giá chất lượng của bộ kiểm thử. Nếu độ bao phủ kiểm thử thấp, ví dụ 5%, điều đó cho thấy bạn chưa kiểm thử đủ.
Tuy nhiên, điều ngược lại không phải lúc nào cũng đúng. Ví dụ, độ bao phủ kiểm thử 100% không đảm bảo rằng bạn có một bộ kiểm thử tốt. Nói cách khác, một bộ kiểm thử có độ bao phủ cao vẫn có thể kém chất lượng.
Bài viết này được đăng tại [free tuts .net]
Ví dụ về độ bao phủ kiểm thử với unittest
Chúng ta sẽ sử dụng cấu trúc dự án sau để minh họa cách sử dụng coverage với unittest. Bạn có thể lấy mã nguồn từ hướng dẫn này.
D:\python-unit-testing
├── shapes
| ├── circle.py
| ├── shape.py
| └── square.py
└── test
├── test_circle.py
├── test_square.py
└── __init__.py
Để tạo báo cáo độ bao phủ, bạn cần thực hiện hai bước:
Bước 1: Chạy mô-đun coverage để tạo dữ liệu độ bao phủ:
python -m coverage run -m unittest
Bước 2: Biến dữ liệu độ bao phủ thành một báo cáo:
python -m coverage report
Output:
Name Stmts Miss Cover ----------------------------------------- shapes\circle.py 9 0 100% shapes\shape.py 4 0 100% shapes\square.py 9 0 100% test\__init__.py 0 0 100% test\test_circle.py 14 0 100% test\test_square.py 14 0 100% ----------------------------------------- TOTAL 50 0 100%
Để tạo báo cáo độ bao phủ ở định dạng HTML, bạn thay đổi tùy chọn của mô-đun coverage thành HTML như sau:
python -m coverage html
Output:
Wrote HTML report to htmlcov\index.html
Kết quả cho thấy vị trí của báo cáo độ bao phủ HTML tại htmlcov\index.html trong thư mục dự án. Nếu bạn mở tệp index.html trong thư mục htmlcov, nó sẽ trông như sau:

Xem chi tiết báo cáo độ bao phủ với unittest
Đầu tiên, thêm phương thức perimeter() vào lớp Circle như sau:
import math
from .shape import Shape
class Circle(Shape):
def __init__(self, radius: float) -> None:
if radius < 0:
raise ValueError('The radius cannot be negative')
self._radius = radius
def area(self) -> float:
return math.pi * math.pow(self._radius, 2)
def perimeter(self) -> float:
return 2 * math.pi * self._radius
Tiếp theo, thu thập dữ liệu độ bao phủ bằng cách chạy lệnh sau:
python -m coverage run -m unittest
Sau đó, tạo báo cáo độ bao phủ bằng lệnh:
python -m coverage report

Output:
Name Stmts Miss Cover ----------------------------------------- shapes\circle.py 11 1 91% shapes\shape.py 4 0 100% shapes\square.py 9 0 100% test\__init__.py 0 0 100% test\test_circle.py 14 0 100% test\test_square.py 14 0 100% ----------------------------------------- TOTAL 52 1 98%
Độ bao phủ hiện tại là 98% tổng thể và 91% trong mô-đun shapes\circle.py. Điều này là do phương thức perimeter() chưa được kiểm thử.
Sau đó, tạo báo cáo độ bao phủ ở định dạng HTML:
python -m coverage html
.png)

Các kiểu dữ liệu trong C ( int - float - double - char ...)
Thuật toán tìm ước chung lớn nhất trong C/C++
Cấu trúc lệnh switch case trong C++ (có bài tập thực hành)
ComboBox - ListBox trong lập trình C# winforms
Random trong Python: Tạo số random ngẫu nhiên
Lệnh cin và cout trong C++
Cách khai báo biến trong PHP, các loại biến thường gặp
Download và cài đặt Vertrigo Server
Thẻ li trong HTML
Thẻ article trong HTML5
Cấu trúc HTML5: Cách tạo template HTML5 đầu tiên
Cách dùng thẻ img trong HTML và các thuộc tính của img
Thẻ a trong HTML và các thuộc tính của thẻ a thường dùng