2012-03-21 24 views
6

Tôi nghĩ rằng tôi đang thiếu một cái gì đó về phần mở rộng nhân sư cho doctest.Tự động tạo ra đầu ra doctest với phần mở rộng Sphinx

Các ví dụ điển hình trong tài liệu là: không có

.. doctest:: 

    >>> print 1 
    1 

phải là một cách để cho nhân sư tạo ra các đầu ra (ở đây: 1) tự động?

Theo như tôi hiểu, nó có thể chạy:

$ make doctest 

mà có tác dụng để kiểm tra các đoạn mã, và so sánh sản lượng thực tế với sản lượng dự kiến. Ví dụ, nếu bạn có

.. doctest:: 

    >>> print 1 
    3 

doctest sẽ cảnh báo bạn rằng nó đã 1 trong khi nó đã mong 3.

Thay vào đó, tôi muốn nhân sư chèn đầu ra thực một mình vào chuỗi tài liệu của tôi hoặc trong tệp .rst của tôi. Ví dụ, nếu chúng ta có một cái gì đó như:

.. doctest:: 

    >>> print 1 
    >>> print [2*x for x in range(3)] 

Tôi muốn rằng khi chúng ta chạy make doctest với một lựa chọn, nó thay đổi docstring tới:

.. doctest:: 

    >>> print 1 
    1 
    >>> print [2*x for x in range(3)] 
    [0,2,4] 

tôi chắc chắn rằng nó có thể, và sẽ rất tiện lợi!

Trả lời

7

Tôi phải mạnh mẽ (nhưng vui lòng) tư vấn chống lại những gì bạn đang cố gắng làm.

gì bạn đang yêu cầu là chống lại "phần test" của doctest module:

Các tìm kiếm mô-đun doctest cho đoạn văn bản trông giống như phiên Python tương tác, và sau đó thực hiện những phiên để xác minh rằng họ hoạt động chính xác như được hiển thị.

Các thử nghiệm này có lý do nếu bạn ghi đầu vào và đầu ra mong muốn và để Python kiểm tra xem đầu ra mong đợi có khớp với đầu ra thực tế không.

Nếu bạn để Python tạo ra kết quả mong đợi, tốt .. nó sẽ không còn là được mong đợi (bởi người dùng/tác giả), vì vậy các tài liệu sẽ không bao giờ thất bại, do đó những thử nghiệm đó sẽ vô ích.

Lưu ý: Nếu bên trong một hàm không có logic (nếu/else, while-loop, append, vv ..) không cần kiểm tra chúng. Và thử nghiệm không được tái tạo logic thử nghiệm, nếu không chúng sẽ không kiểm tra chức năng nữa.

Tôi tìm thấy this video về phát triển thử nghiệm theo định hướng rất thú vị, có thể bạn có thể quan tâm nếu bạn muốn biết thêm về lập luận này.

+0

Cảm ơn! Tôi nhận ra tôi đã hiểu lầm mục đích của phần mở rộng nhân sư này. Tôi nghĩ đó là cách viết tài liệu nhanh hơn, nhưng giờ tôi đã hiểu toàn bộ ý tưởng đằng sau doctest. – user1283990

5

Dưới đây là một gợi ý về cách bạn có thể đạt được những gì tôi nghi ngờ bạn có thể tìm kiếm:

Doug Hellmann đã viết một bài viết thú vị được gọi là Writing Technical Documentation with Sphinx, Paver, and Cog. Nó có a section mô tả cách công cụ Cog có thể được sử dụng để tự động chạy các ví dụ mã và nắm bắt đầu ra để đưa vào tài liệu do Sphinx tạo.


Ngoài ra còn có một contributed Sphinx extension called autorun có thể thực thi mã trong một đặc biệt chỉ thị runblock và đính kèm các đầu ra để tài liệu.

Các vấn đề liên quan