Computer >> Máy Tính >  >> Lập trình >> Python

Kiểm tra các ví dụ Python tương tác (học thuyết)


Phân phối chuẩn của Python chứa mô-đun 'doctest'. Chức năng của mô-đun này giúp bạn có thể tìm kiếm các phần văn bản trông giống như các phiên Python tương tác và thực thi các phiên này để xem liệu chúng có hoạt động chính xác như được hiển thị hay không. Các ví dụ này được trích xuất từ ​​các biểu thức docstring trong lớp, mô-đun hoặc hàm. Doctests cũng có thể được chạy từ một tệp văn bản từ một tệp văn bản đi kèm.

Trong Python, 'docstring' là một chuỗi ký tự xuất hiện dưới dạng biểu thức đầu tiên trong một lớp, hàm hoặc mô-đun. Nó bị bỏ qua khi bộ được thực thi, nhưng nó được trình biên dịch nhận dạng và đưa vào thuộc tính __doc__ của lớp, hàm hoặc mô-đun bao quanh.

Các docstrings thường được sử dụng để mô tả cách sử dụng ví dụ của các phần khác nhau của mã Python. Mô-đun học thuyết cho phép xác minh rằng các chuỗi tài liệu này được cập nhật với các bản sửa đổi không liên tục trong mã.

Trong đoạn mã sau, một hàm giai thừa được xác định xen kẽ với việc sử dụng ví dụ. Để xác minh xem cách sử dụng ví dụ có đúng hay không, hãy gọi hàm testmod () trong mô-đun doctest.

def add(a,b):
'''
>>> add(10,20)
30
>>> add('aaa','bbb')
'aaabbb'
>>> add('aaa',20)
Traceback (most recent call last):
...
TypeError: must be str, not int
'''
return a+b

Đầu tiên, hãy nhập và lưu tập lệnh trên dưới dạng mytest.py và cố gắng thực thi tập lệnh này từ dòng lệnh.

Python mytest.py

Không có đầu ra nào được hiển thị trừ khi ví dụ không thành công. Bây giờ thay đổi dòng lệnh thành

Python mytest.py –v

Bây giờ bảng điều khiển sẽ hiển thị kết quả sau -

F:\Python36>python mytest.py -v
Trying:
add(10,20)
Expecting:
30
ok
Trying:
add('aaa','bbb')
Expecting:
'aaabbb'
ok
Trying:
add('aaa',20)
Expecting:
Traceback (most recent call last):
...
TypeError: must be str, not int
ok
1 items had no tests:
__main__
1 items passed all tests:
3 tests in __main__.add
3 tests in 2 items.
3 passed and 0 failed.
Test passed.

Kiểm tra Ví dụ trong Tệp Văn bản

Một ứng dụng đơn giản khác của học thuyết là thử nghiệm các ví dụ tương tác trong tệp văn bản. Điều này có thể được thực hiện với hàm testfile ().

Văn bản sau được lưu trữ trong một tệp văn bản có tên là 'example.txt'

Using ''add''
-------------------
This is an example text file . First import
''add'' from the ''mytest'' module:
>>> from mytest import add
>>> add(10,20)
30

Nội dung tệp được coi là docstring. Để xác minh các ví dụ trong tệp văn bản, hãy sử dụng hàm testfile () của mô-đun học thuyết.

def add(a,b):
return a+b
if __name__ == "__main__":
import doctest
doctest.testfile("example.txt")
  • Như với testmod (), testfile () sẽ không hiển thị bất kỳ thứ gì trừ khi một ví dụ không thành công. Nếu một ví dụ không thành công, thì (các) ví dụ không thành công và (các) nguyên nhân của (các) lỗi sẽ được in ra bảng điều khiển, sử dụng định dạng tương tự như testmod ().

  • Trong hầu hết các trường hợp, việc sao chép và dán phiên bảng điều khiển tương tác hoạt động tốt, nhưng doctest không cố gắng thực hiện mô phỏng chính xác bất kỳ trình bao Python cụ thể nào.

  • Bất kỳ đầu ra mong đợi nào phải ngay lập tức theo dòng '>>>' hoặc '...' cuối cùng chứa mã và đầu ra dự kiến ​​(nếu có) kéo dài đến dòng tiếp theo '>>>' hoặc toàn bộ khoảng trắng.

  • Đầu ra mong đợi không được chứa một dòng toàn khoảng trắng, vì một dòng như vậy được sử dụng để báo hiệu sự kết thúc của đầu ra dự kiến. Nếu đầu ra mong đợi chứa một dòng trống, hãy đặt trong ví dụ tài liệu của bạn, mỗi vị trí sẽ có một dòng trống.

Trong bài viết này, các hàm testmod () và testfile () trong mô-đun doctest đã được thảo luận.