doctest is a module included in the Python programming language's standard library that allows the easy generation of tests based on output from the standard Python interpreter shell, cut and pasted into .
When using the Python shell, the primary prompt: , is followed by new commands. The secondary prompt: , is used when continuing commands on multiple lines; and the result of executing the command is expected on following lines. A blank line, or another line starting with the primary prompt is seen as the end of the output from the command.
The doctest module looks for such sequences of prompts in a docstring, re-executes the extracted command and checks the output against the output of the command given in the docstrings test example.
The default action when running doctests is for no output to be shown when tests pass. This can be modified by options to the doctest runner. In addition, doctest has been integrated with the Python unit test module allowing doctests to be run as standard unittest testcases. Unittest testcase runners allow more options when running tests such as the reporting of test statistics such as tests passed, and failed.
On the basis of the output of Python's interactive interpreter, text can be mixed with tests that exercise the library, showing expected results.
"""A solution to the problem given in:
https://rgrig.blogspot.com/2005/11/writing-readable-code.html
'Given a list, lst, say for each element the 0-index where it appears for
the first time. So the list x = [0, 1, 4, 2, 4, 1, 0, 2] is
transformed into y = [0, 1, 2, 3, 2, 1, 0, 3]. Notice that for all
i we have x[y[i]] = x[i]. Use any programming language and any data
representation you want.'
>>> x = [0, 1, 4, 2, 4, 1, 0, 2]
>>> list_to_0_index(x)
[0, 1, 2, 3, 2, 1, 0, 3]
>>>
"""
return [lst.index(i) for i in lst]
Normally, the README file would explain the API of the module, like this:
>>> a = 1 >>> b = 2 >>> a + b 3
Notice, that we just demonstrated how to add two numbers in Python, and what the result will look like.
A special option allows you to be somewhat fuzzy about your examples:
>>> o = object() >>> o # doctest: +ELLIPSIS
"""Return set of the unique words in list of lines of text.
Example:
>>> from StringIO import StringIO
>>> fileText = '''the cat sat on the mat
... the mat was ondur the cat
... one fish two fish red fish
... blue fish
... This fish has a yellow car
... This fish has a yellow star'''
>>> file = StringIO(fileText)
>>> page = file.readlines()
>>> words = unique_words(page)
>>> print sorted(list(words))
["This", "a", "blue", "car", "cat", "fish", "has", "mat",
"on", "ondur", "one", "red", "sat", "star", "the", "two",
"was", "yellow"]
>>>
"""
return set(word for line in page for word in line.split())
def _test():
import doctest
doctest.testmod()
if __name__ == "__main__":
_test()
The ExUnit.DocTest Elixir library implements functionality similar to Doctest.
An implementation of Doctest for Haskell.
Writing documentation tests in Elm.
Writing documentation tests in Rust.
Writing documentation tests in Elixir.
byexample supports writing doctests for several popular programming languages (e.g. Python, Ruby, Shell, JavaScript, C/C++, Java, Go, Rust) inside Markdown, reStructuredText and other text documents.
|
|