Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
465 views
in Technique[技术] by (71.8m points)

python - Auto generate doctest output with Sphinx extension

I think I am missing something about the sphinx extension for doctest.

The typical example in the documentation is:

.. doctest::

   >>> print 1
   1

Isn't there a way to let sphinx generate the output (here: 1) automatically?

As far as I understood, it is possible to run:

$ make doctest

which has the effect to test the code snippets, and compare the real output with the expected output. For example, if you have

.. doctest::

   >>> print 1
   3

doctest will warn you that it got 1 while it was expecting 3.

Instead, I would like sphinx to insert the real output alone in my docstring or in my .rst file. For example, if we have something like:

.. doctest::

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

I would like that when we run make doctest with an option, it changes the docstring to:

.. doctest::

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

I'm sure it's possible, and would be very convenient!

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

I have to strongly (but kindly) advise against what you're trying to do.

What you're asking is against the "test part" of the doctest module:

The doctest module searches for pieces of text that look like interactive Python sessions, and then executes those sessions to verify that they work exactly as shown.

These tests have a reasons to be if you write the input and the expected output and let Python check if the expected output match the actual output.

If you let Python produce the expected output, well.. it will no longer be expected (by the user/author), so the doctests will never fail, hence those tests will be useless.

Note: If inside a function there's no logic (if/else, while-loops, appends, etc..) there's no need to test them. And tests must not reproduce the testing logic, otherwise they're not testing the function anymore.

I found this video about test driven development very interesting, maybe it could be of interest to you if you want to know more about this argument.


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...