UnitTest Framework - API Doctest
API doctest xoay quanh hai lớp vùng chứa sau được sử dụng để lưu trữ các ví dụ tương tác từ docstrings:
Example - Một câu lệnh Python duy nhất, được ghép nối với đầu ra dự kiến của nó.
DocTest - Tập hợp các Ví dụ, thường được trích xuất từ một chuỗi tài liệu hoặc một tệp văn bản.
Các lớp xử lý bổ sung sau đây được xác định để tìm, phân tích cú pháp, chạy và kiểm tra các ví dụ về học thuyết -
DocTestFinder - Tìm tất cả các chuỗi tài liệu trong một mô-đun nhất định và sử dụng DocTestParser để tạo một DocTest từ mọi chuỗi tài liệu có chứa các ví dụ tương tác.
DocTestParser - Tạo một đối tượng học thuyết từ một chuỗi (chẳng hạn như chuỗi tài liệu của một đối tượng).
DocTestRunner - Thực thi các ví dụ trong một học thuyết và sử dụng Công cụ kiểm tra đầu ra để xác minh đầu ra của chúng.
OutputChecker - So sánh đầu ra thực tế từ một ví dụ về học thuyết với đầu ra dự kiến và quyết định xem chúng có khớp hay không.
Lớp DocTestFinder
Nó là một lớp xử lý được sử dụng để trích xuất các học thuyết có liên quan đến một đối tượng nhất định, từ chuỗi tài liệu của nó và chuỗi tài liệu của các đối tượng được chứa trong nó. Doctests hiện có thể được trích xuất từ các loại đối tượng sau - mô-đun, hàm, lớp, phương thức, staticmethods, classmethods và thuộc tính.
Lớp này định nghĩa phương thức find (). Nó trả về một danh sách các DocTests được xác định bởi docstring của đối tượng hoặc bởi bất kỳ docstrings nào của đối tượng chứa nó.
DocTestParser Class
Nó là một lớp xử lý được sử dụng để trích xuất các ví dụ tương tác từ một chuỗi và sử dụng chúng để tạo một đối tượng DocTest. Lớp này định nghĩa các phương thức sau:
get_doctest() - Trích xuất tất cả các ví dụ về học thuyết từ chuỗi đã cho và thu thập chúng vào một DocTest vật.
get_examples(string[, name]) - Trích xuất tất cả các ví dụ về học thuyết từ chuỗi đã cho và trả lại chúng dưới dạng danh sách Examplecác đối tượng. Số dòng dựa trên 0. Tên đối số tùy chọn là tên xác định chuỗi này và chỉ được sử dụng cho các thông báo lỗi.
parse(string[, name]) - Chia chuỗi đã cho thành các ví dụ và văn bản xen kẽ, và trả lại chúng dưới dạng danh sách xen kẽ Examplesvà chuỗi. Số dòng choExamplesdựa trên 0. Tên đối số tùy chọn là tên xác định chuỗi này và chỉ được sử dụng cho các thông báo lỗi.
Lớp DocTestRunner
Đây là một lớp xử lý được sử dụng để thực thi và xác minh các ví dụ tương tác trong DocTest. Các phương thức sau được định nghĩa trong đó:
report_start ()
Báo cáo rằng người chạy thử sắp xử lý ví dụ đã cho. Phương thức này được cung cấp để cho phép các lớp con củaDocTestRunnerđể tùy chỉnh đầu ra của họ; nó không nên được gọi trực tiếp
report_success ()
Báo cáo rằng ví dụ đã cho đã chạy thành công. Phương pháp này được cung cấp để cho phép các lớp con của DocTestRunner tùy chỉnh đầu ra của chúng; nó không nên được gọi trực tiếp.
report_failure ()
Báo cáo rằng ví dụ đã cho không thành công. Phương thức này được cung cấp để cho phép các lớp con củaDocTestRunnerđể tùy chỉnh đầu ra của họ; nó không nên được gọi trực tiếp.
report_uneGENDER_exception ()
Báo cáo rằng ví dụ đã cho nêu ra một ngoại lệ không mong muốn. Phương pháp này được cung cấp để cho phép các lớp con của DocTestRunner tùy chỉnh đầu ra của chúng; nó không nên được gọi trực tiếp.
chạy (thử nghiệm)
Chạy các ví dụ trong bài kiểm tra (một đối tượng doctest), và hiển thị kết quả bằng cách sử dụng chức năng nhà văn ra .
tóm tắt ([verbose])
In bản tóm tắt của tất cả các trường hợp thử nghiệm đã được chạy bởi DocTestRunner này và trả về một bộ TestResults có tên (không thành công, đã thử). Đối số dài dòng tùy chọn kiểm soát mức độ chi tiết của bản tóm tắt. Nếu độ dài không được chỉ định, thì độ dài của DocTestRunner sẽ được sử dụng.
Lớp OutputChecker
Lớp này được sử dụng để kiểm tra xem đầu ra thực tế từ một ví dụ về học thuyết có khớp với đầu ra mong đợi hay không.
Các phương thức sau được định nghĩa trong lớp này:
check_output ()
Trở về Truenếu đầu ra thực tế từ một ví dụ ( got ) khớp với đầu ra dự kiến ( muốn ). Các chuỗi này luôn được coi là khớp nếu chúng giống hệt nhau; nhưng tùy thuộc vào cờ tùy chọn mà người chạy thử nghiệm đang sử dụng, một số loại đối sánh không chính xác cũng có thể xảy ra. Xem phần Cờ tùy chọn và Chỉ thị để biết thêm thông tin về cờ tùy chọn.
output_difference ()
Trả về một chuỗi mô tả sự khác biệt giữa đầu ra mong đợi cho một ví dụ cụ thể ( ví dụ ) và đầu ra thực tế ( nhận ).
Tích hợp DocTest với Unittest
Mô-đun học thuyết cung cấp hai chức năng có thể được sử dụng để tạo các bộ thử nghiệm mới nhất từ các mô-đun và tệp văn bản chứa học thuyết. Để tích hợp với khám phá thử nghiệm mới nhất, hãy bao gồm hàm load_tests () trong mô-đun thử nghiệm của bạn -
import unittest
import doctest
import doctestexample
def load_tests(loader, tests, ignore):
tests.addTests(doctest.DocTestSuite(doctestexample))
return tests
Một trang web TestSuite tổng hợp của các bài kiểm tra từ học thuyết cũng như học thuyết đơn nhất sẽ được hình thành và giờ đây nó có thể được thực thi bằng phương thức main () hoặc phương thức run () của mô-đun đơn nhất.
Sau đây là hai chức năng chính để tạo unittest.TestSuite các phiên bản từ tệp văn bản và mô-đun với các học thuyết -
doctest.DocFileSuite ()
Nó được sử dụng để chuyển đổi các bài kiểm tra học thuyết từ một hoặc nhiều tệp văn bản thành unittest.TestSuite. Unittest.TestSuite được trả về sẽ được chạy bởi framework duy nhất và chạy các ví dụ tương tác trong mỗi tệp. Nếu bất kỳ ví dụ nào trong tệp không thành công, thì kiểm tra đơn vị tổng hợp không thành công vàfailureException ngoại lệ được nêu ra hiển thị tên của tệp chứa thử nghiệm và số dòng (đôi khi gần đúng).
doctest.DocTestSuite ()
Nó được sử dụng để chuyển đổi các bài kiểm tra học thuyết cho một mô-đun thành unittest.TestSuite.
Unittest.TestSuite được trả về phải được chạy bởi framework duy nhất và chạy từng học thuyết trong mô-đun. Nếu bất kỳ học thuyết nào không thành công, thì bài kiểm tra đơn vị tổng hợp không thành công vàfailureException ngoại lệ được nêu ra hiển thị tên của tệp chứa thử nghiệm và số dòng (đôi khi gần đúng)
Dưới vỏ bọc, DocTestSuite () tạo unittest.TestSuite ngoài các phiên bản doctest.DocTestCase và DocTestCase là một lớp con của Unittest.TestCase.
Tương tự như vậy, DocFileSuite () tạo ra một.TestSuite đơn nhất ngoài các thể hiện của doctest.DocFileCase và DocFileCase là một lớp con của DocTestCase.
Vì vậy, cả hai cách để tạo một phiên bản DocTestSuite chạy nhất của DocTestCase. Khi bạn tự chạy các chức năng học thuyết, bạn có thể kiểm soát trực tiếp các tùy chọn học thuyết đang được sử dụng bằng cách chuyển cờ tùy chọn cho các chức năng học thuyết.
Tuy nhiên, nếu bạn đang viết một khung công tác độc nhất, thì cuối cùng, khung công tác mới nhất sẽ kiểm soát thời gian và cách thức chạy các thử nghiệm. Tác giả khung thường muốn kiểm soát các tùy chọn báo cáo học thuyết (có thể, ví dụ: được chỉ định bởi các tùy chọn dòng lệnh), nhưng không có cách nào để chuyển các tùy chọn thông qua trình chạy thử nghiệm học thuyết duy nhất.