blob: f2130891352174bea1125490f6902286b41f570c [file] [log] [blame]
Tim Peters76882292001-02-17 05:58:44 +00001\section{\module{doctest} ---
2 Test docstrings represent reality}
3
4\declaremodule{standard}{doctest}
5\moduleauthor{Tim Peters}{tim_one@users.sourceforge.net}
6\sectionauthor{Tim Peters}{tim_one@users.sourceforge.net}
7\sectionauthor{Moshe Zadka}{moshez@debian.org}
8
9\modulesynopsis{A framework for verifying examples in docstrings.}
10
11The \module{doctest} module searches a module's docstrings for text that looks
12like an interactive Python session, then executes all such sessions to verify
13they still work exactly as shown. Here's a complete but small example:
14
15\begin{verbatim}
16"""
17This is module example.
18
19Example supplies one function, factorial. For example,
20
21>>> factorial(5)
22120
23"""
24
25def factorial(n):
26 """Return the factorial of n, an exact integer >= 0.
27
28 If the result is small enough to fit in an int, return an int.
29 Else return a long.
30
31 >>> [factorial(n) for n in range(6)]
32 [1, 1, 2, 6, 24, 120]
33 >>> [factorial(long(n)) for n in range(6)]
34 [1, 1, 2, 6, 24, 120]
35 >>> factorial(30)
36 265252859812191058636308480000000L
37 >>> factorial(30L)
38 265252859812191058636308480000000L
39 >>> factorial(-1)
40 Traceback (most recent call last):
41 ...
42 ValueError: n must be >= 0
43
44 Factorials of floats are OK, but the float must be an exact integer:
45 >>> factorial(30.1)
46 Traceback (most recent call last):
47 ...
48 ValueError: n must be exact integer
49 >>> factorial(30.0)
50 265252859812191058636308480000000L
51
52 It must also not be ridiculously large:
53 >>> factorial(1e100)
54 Traceback (most recent call last):
55 ...
56 OverflowError: n too large
57 """
58
59\end{verbatim}
60% allow LaTeX to break here.
61\begin{verbatim}
62
63 import math
64 if not n >= 0:
65 raise ValueError("n must be >= 0")
66 if math.floor(n) != n:
67 raise ValueError("n must be exact integer")
Raymond Hettinger92f21b12003-07-11 22:32:18 +000068 if n+1 == n: # catch a value like 1e300
Tim Peters76882292001-02-17 05:58:44 +000069 raise OverflowError("n too large")
70 result = 1
71 factor = 2
72 while factor <= n:
73 try:
74 result *= factor
75 except OverflowError:
76 result *= long(factor)
77 factor += 1
78 return result
79
80def _test():
81 import doctest, example
82 return doctest.testmod(example)
83
84if __name__ == "__main__":
85 _test()
86\end{verbatim}
87
88If you run \file{example.py} directly from the command line, doctest works
89its magic:
90
91\begin{verbatim}
92$ python example.py
93$
94\end{verbatim}
95
96There's no output! That's normal, and it means all the examples worked.
Fred Drake7eb14632001-02-17 17:32:41 +000097Pass \programopt{-v} to the script, and doctest prints a detailed log
98of what it's trying, and prints a summary at the end:
Tim Peters76882292001-02-17 05:58:44 +000099
100\begin{verbatim}
101$ python example.py -v
102Running example.__doc__
103Trying: factorial(5)
104Expecting: 120
105ok
1060 of 1 examples failed in example.__doc__
107Running example.factorial.__doc__
108Trying: [factorial(n) for n in range(6)]
109Expecting: [1, 1, 2, 6, 24, 120]
110ok
111Trying: [factorial(long(n)) for n in range(6)]
112Expecting: [1, 1, 2, 6, 24, 120]
113ok
114Trying: factorial(30)
115Expecting: 265252859812191058636308480000000L
116ok
117\end{verbatim}
118
119And so on, eventually ending with:
120
121\begin{verbatim}
122Trying: factorial(1e100)
123Expecting:
124Traceback (most recent call last):
125 ...
126OverflowError: n too large
127ok
1280 of 8 examples failed in example.factorial.__doc__
1292 items passed all tests:
130 1 tests in example
131 8 tests in example.factorial
1329 tests in 2 items.
1339 passed and 0 failed.
134Test passed.
135$
136\end{verbatim}
137
138That's all you need to know to start making productive use of doctest! Jump
139in. The docstrings in doctest.py contain detailed information about all
140aspects of doctest, and we'll just cover the more important points here.
141
142\subsection{Normal Usage}
143
144In normal use, end each module \module{M} with:
145
146\begin{verbatim}
147def _test():
148 import doctest, M # replace M with your module's name
149 return doctest.testmod(M) # ditto
150
151if __name__ == "__main__":
152 _test()
153\end{verbatim}
154
Martin v. Löwis4581cfa2002-11-22 08:23:09 +0000155If you want to test the module as the main module, you don't need to
Fred Drake5d2f5152003-06-28 03:09:06 +0000156pass M to \function{testmod()}; in this case, it will test the current
Martin v. Löwis4581cfa2002-11-22 08:23:09 +0000157module.
158
Tim Peters76882292001-02-17 05:58:44 +0000159Then running the module as a script causes the examples in the docstrings
160to get executed and verified:
161
162\begin{verbatim}
163python M.py
164\end{verbatim}
165
166This won't display anything unless an example fails, in which case the
167failing example(s) and the cause(s) of the failure(s) are printed to stdout,
Fred Drake7eb14632001-02-17 17:32:41 +0000168and the final line of output is \code{'Test failed.'}.
Tim Peters76882292001-02-17 05:58:44 +0000169
Fred Drake7eb14632001-02-17 17:32:41 +0000170Run it with the \programopt{-v} switch instead:
Tim Peters76882292001-02-17 05:58:44 +0000171
172\begin{verbatim}
173python M.py -v
174\end{verbatim}
175
Fred Drake7eb14632001-02-17 17:32:41 +0000176and a detailed report of all examples tried is printed to \code{stdout},
Tim Peters76882292001-02-17 05:58:44 +0000177along with assorted summaries at the end.
178
Fred Drake5d2f5152003-06-28 03:09:06 +0000179You can force verbose mode by passing \code{verbose=1} to
180\function{testmod()}, or
Tim Peters76882292001-02-17 05:58:44 +0000181prohibit it by passing \code{verbose=0}. In either of those cases,
Fred Drake5d2f5152003-06-28 03:09:06 +0000182\code{sys.argv} is not examined by \function{testmod()}.
Tim Peters76882292001-02-17 05:58:44 +0000183
Fred Drake5d2f5152003-06-28 03:09:06 +0000184In any case, \function{testmod()} returns a 2-tuple of ints \code{(\var{f},
Fred Drake7eb14632001-02-17 17:32:41 +0000185\var{t})}, where \var{f} is the number of docstring examples that
186failed and \var{t} is the total number of docstring examples
187attempted.
Tim Peters76882292001-02-17 05:58:44 +0000188
189\subsection{Which Docstrings Are Examined?}
190
191See \file{docstring.py} for all the details. They're unsurprising: the
192module docstring, and all function, class and method docstrings are
193searched, with the exception of docstrings attached to objects with private
Tim Peters0481d242001-10-02 21:01:22 +0000194names. Objects imported into the module are not searched.
Tim Peters76882292001-02-17 05:58:44 +0000195
Fred Drake7eb14632001-02-17 17:32:41 +0000196In addition, if \code{M.__test__} exists and "is true", it must be a
197dict, and each entry maps a (string) name to a function object, class
198object, or string. Function and class object docstrings found from
199\code{M.__test__} are searched even if the name is private, and
200strings are searched directly as if they were docstrings. In output,
201a key \code{K} in \code{M.__test__} appears with name
Tim Peters76882292001-02-17 05:58:44 +0000202
203\begin{verbatim}
204 <name of M>.__test__.K
205\end{verbatim}
206
207Any classes found are recursively searched similarly, to test docstrings in
208their contained methods and nested classes. While private names reached
209from \module{M}'s globals are skipped, all names reached from
Fred Drake7eb14632001-02-17 17:32:41 +0000210\code{M.__test__} are searched.
Tim Peters76882292001-02-17 05:58:44 +0000211
212\subsection{What's the Execution Context?}
213
Fred Drake5d2f5152003-06-28 03:09:06 +0000214By default, each time \function{testmod()} finds a docstring to test, it uses
215a \emph{copy} of \module{M}'s globals, so that running tests on a module
Tim Peters76882292001-02-17 05:58:44 +0000216doesn't change the module's real globals, and so that one test in
217\module{M} can't leave behind crumbs that accidentally allow another test
218to work. This means examples can freely use any names defined at top-level
Tim Peters0481d242001-10-02 21:01:22 +0000219in \module{M}, and names defined earlier in the docstring being run.
Tim Peters76882292001-02-17 05:58:44 +0000220
221You can force use of your own dict as the execution context by passing
222\code{globs=your_dict} to \function{testmod()} instead. Presumably this
Fred Drake7eb14632001-02-17 17:32:41 +0000223would be a copy of \code{M.__dict__} merged with the globals from other
Tim Peters76882292001-02-17 05:58:44 +0000224imported modules.
225
226\subsection{What About Exceptions?}
227
228No problem, as long as the only output generated by the example is the
229traceback itself. For example:
230
231\begin{verbatim}
Fred Drake19f3c522001-02-22 23:15:05 +0000232>>> [1, 2, 3].remove(42)
233Traceback (most recent call last):
234 File "<stdin>", line 1, in ?
235ValueError: list.remove(x): x not in list
236>>>
Tim Peters76882292001-02-17 05:58:44 +0000237\end{verbatim}
238
239Note that only the exception type and value are compared (specifically,
Fred Drake7eb14632001-02-17 17:32:41 +0000240only the last line in the traceback). The various ``File'' lines in
Tim Peters76882292001-02-17 05:58:44 +0000241between can be left out (unless they add significantly to the documentation
242value of the example).
243
244\subsection{Advanced Usage}
245
Raymond Hettinger92f21b12003-07-11 22:32:18 +0000246Several module level functions are available for controlling how doctests
247are run.
Tim Peters76882292001-02-17 05:58:44 +0000248
Raymond Hettinger92f21b12003-07-11 22:32:18 +0000249\begin{funcdesc}{debug}{module, name}
250 Debug a single docstring containing doctests.
251
252 Provide the \var{module} (or dotted name of the module) containing the
253 docstring to be debugged and the \var{name} (within the module) of the
254 object with the docstring to be debugged.
255
256 The doctest examples are extracted (see function \function{testsource()}),
257 and written to a temporary file. The Python debugger, \refmodule{pdb},
258 is then invoked on that file.
259 \versionadded{2.3}
260\end{funcdesc}
261
262\begin{funcdesc}{testmod}{}
263 This function provides the most basic interface to the doctests.
264 It creates a local instance of class \class{Tester}, runs appropriate
265 methods of that class, and merges the results into the global \class{Tester}
266 instance, \code{master}.
267
268 To get finer control than \function{testmod()} offers, create an instance
269 of \class{Tester} with custom policies and run the methods of \code{master}
270 directly. See \code{Tester.__doc__} for details.
271\end{funcdesc}
272
273\begin{funcdesc}{testsource}{module, name}
274 Extract the doctest examples from a docstring.
275
276 Provide the \var{module} (or dotted name of the module) containing the
277 tests to be extracted and the \var{name} (within the module) of the object
278 with the docstring containing the tests to be extracted.
279
280 The doctest examples are returned as a string containing Python
281 code. The expected output blocks in the examples are converted
282 to Python comments.
283 \versionadded{2.3}
284\end{funcdesc}
285
286\begin{funcdesc}{DocTestSuite}{\optional{module}}
287 Convert doctest tests for a module to a \refmodule{unittest}
288 \class{TestSuite}.
289
290 The returned \class{TestSuite} is to be run by the unittest framework
291 and runs each doctest in the module. If any of the doctests fail,
292 then the synthesized unit test fails, and a \exception{DocTestTestFailure}
293 exception is raised showing the name of the file containing the test and a
294 (sometimes approximate) line number.
295
296 The optional \var{module} argument provides the module to be tested. It
297 can be a module object or a (possibly dotted) module name. If not
298 specified, the module calling \function{DocTestSuite()} is used.
299
300 Example using one of the many ways that the \refmodule{unittest} module
301 can use a \class{TestSuite}:
302
303 \begin{verbatim}
304 import unittest
305 import doctest
306 import my_module_with_doctests
307
308 suite = doctest.DocTestSuite(my_module_with_doctests)
309 runner = unittest.TextTestRunner()
310 runner.run(suite)
311 \end{verbatim}
312
313 \versionadded{2.3}
314\end{funcdesc}
Tim Peters76882292001-02-17 05:58:44 +0000315
316
317\subsection{How are Docstring Examples Recognized?}
318
319In most cases a copy-and-paste of an interactive console session works fine
320--- just make sure the leading whitespace is rigidly consistent (you can mix
321tabs and spaces if you're too lazy to do it right, but doctest is not in
322the business of guessing what you think a tab means).
323
324\begin{verbatim}
Fred Drake19f3c522001-02-22 23:15:05 +0000325>>> # comments are ignored
326>>> x = 12
327>>> x
32812
329>>> if x == 13:
330... print "yes"
331... else:
332... print "no"
333... print "NO"
334... print "NO!!!"
335...
336no
337NO
338NO!!!
339>>>
Tim Peters76882292001-02-17 05:58:44 +0000340\end{verbatim}
341
Fred Drake19f3c522001-02-22 23:15:05 +0000342Any expected output must immediately follow the final
343\code{'>\code{>}>~'} or \code{'...~'} line containing the code, and
344the expected output (if any) extends to the next \code{'>\code{>}>~'}
345or all-whitespace line.
Tim Peters76882292001-02-17 05:58:44 +0000346
347The fine print:
348
349\begin{itemize}
350
351\item Expected output cannot contain an all-whitespace line, since such a
352 line is taken to signal the end of expected output.
353
354\item Output to stdout is captured, but not output to stderr (exception
355 tracebacks are captured via a different means).
356
357\item If you continue a line via backslashing in an interactive session, or
358 for any other reason use a backslash, you need to double the backslash in
359 the docstring version. This is simply because you're in a string, and so
360 the backslash must be escaped for it to survive intact. Like:
361
362\begin{verbatim}
363>>> if "yes" == \\
364... "y" + \\
365... "es":
366... print 'yes'
367yes
368\end{verbatim}
369
Tim Petersf0768c82001-02-20 10:57:30 +0000370\item The starting column doesn't matter:
Tim Peters76882292001-02-17 05:58:44 +0000371
372\begin{verbatim}
Tim Petersc4089d82001-02-17 18:03:25 +0000373 >>> assert "Easy!"
374 >>> import math
375 >>> math.floor(1.9)
376 1.0
Tim Peters76882292001-02-17 05:58:44 +0000377\end{verbatim}
378
Fred Drake19f3c522001-02-22 23:15:05 +0000379and as many leading whitespace characters are stripped from the
380expected output as appeared in the initial \code{'>\code{>}>~'} line
381that triggered it.
Fred Drake7eb14632001-02-17 17:32:41 +0000382\end{itemize}
Tim Peters76882292001-02-17 05:58:44 +0000383
384\subsection{Warnings}
385
386\begin{enumerate}
387
Tim Peters76882292001-02-17 05:58:44 +0000388\item \module{doctest} is serious about requiring exact matches in expected
389 output. If even a single character doesn't match, the test fails. This
390 will probably surprise you a few times, as you learn exactly what Python
391 does and doesn't guarantee about output. For example, when printing a
392 dict, Python doesn't guarantee that the key-value pairs will be printed
393 in any particular order, so a test like
394
395% Hey! What happened to Monty Python examples?
Tim Petersf0768c82001-02-20 10:57:30 +0000396% Tim: ask Guido -- it's his example!
Tim Peters76882292001-02-17 05:58:44 +0000397\begin{verbatim}
Fred Drake19f3c522001-02-22 23:15:05 +0000398>>> foo()
399{"Hermione": "hippogryph", "Harry": "broomstick"}
400>>>
Tim Peters76882292001-02-17 05:58:44 +0000401\end{verbatim}
402
403is vulnerable! One workaround is to do
404
405\begin{verbatim}
Fred Drake19f3c522001-02-22 23:15:05 +0000406>>> foo() == {"Hermione": "hippogryph", "Harry": "broomstick"}
4071
408>>>
Tim Peters76882292001-02-17 05:58:44 +0000409\end{verbatim}
410
411instead. Another is to do
412
413\begin{verbatim}
Fred Drake19f3c522001-02-22 23:15:05 +0000414>>> d = foo().items()
415>>> d.sort()
416>>> d
417[('Harry', 'broomstick'), ('Hermione', 'hippogryph')]
Tim Peters76882292001-02-17 05:58:44 +0000418\end{verbatim}
419
420There are others, but you get the idea.
421
422Another bad idea is to print things that embed an object address, like
423
424\begin{verbatim}
Fred Drake19f3c522001-02-22 23:15:05 +0000425>>> id(1.0) # certain to fail some of the time
4267948648
427>>>
Tim Peters76882292001-02-17 05:58:44 +0000428\end{verbatim}
429
430Floating-point numbers are also subject to small output variations across
431platforms, because Python defers to the platform C library for float
432formatting, and C libraries vary widely in quality here.
433
434\begin{verbatim}
Fred Drake19f3c522001-02-22 23:15:05 +0000435>>> 1./7 # risky
4360.14285714285714285
437>>> print 1./7 # safer
4380.142857142857
439>>> print round(1./7, 6) # much safer
4400.142857
Tim Peters76882292001-02-17 05:58:44 +0000441\end{verbatim}
442
443Numbers of the form \code{I/2.**J} are safe across all platforms, and I
444often contrive doctest examples to produce numbers of that form:
445
446\begin{verbatim}
Fred Drake19f3c522001-02-22 23:15:05 +0000447>>> 3./4 # utterly safe
4480.75
Tim Peters76882292001-02-17 05:58:44 +0000449\end{verbatim}
450
451Simple fractions are also easier for people to understand, and that makes
452for better documentation.
453
Skip Montanaro1dc98c42001-06-08 14:40:28 +0000454\item Be careful if you have code that must only execute once.
455
456If you have module-level code that must only execute once, a more foolproof
Fred Drakec1158352001-06-11 14:55:01 +0000457definition of \function{_test()} is
Skip Montanaro1dc98c42001-06-08 14:40:28 +0000458
459\begin{verbatim}
460def _test():
461 import doctest, sys
Martin v. Löwis4581cfa2002-11-22 08:23:09 +0000462 doctest.testmod()
Skip Montanaro1dc98c42001-06-08 14:40:28 +0000463\end{verbatim}
Tim Peters6ebe61f2003-06-27 20:48:05 +0000464
465\item WYSIWYG isn't always the case, starting in Python 2.3. The
Fred Drake5d2f5152003-06-28 03:09:06 +0000466 string form of boolean results changed from \code{'0'} and
467 \code{'1'} to \code{'False'} and \code{'True'} in Python 2.3.
Tim Peters6ebe61f2003-06-27 20:48:05 +0000468 This makes it clumsy to write a doctest showing boolean results that
469 passes under multiple versions of Python. In Python 2.3, by default,
470 and as a special case, if an expected output block consists solely
Fred Drake5d2f5152003-06-28 03:09:06 +0000471 of \code{'0'} and the actual output block consists solely of
472 \code{'False'}, that's accepted as an exact match, and similarly for
473 \code{'1'} versus \code{'True'}. This behavior can be turned off by
Tim Peters6ebe61f2003-06-27 20:48:05 +0000474 passing the new (in 2.3) module constant
475 \constant{DONT_ACCEPT_TRUE_FOR_1} as the value of \function{testmod()}'s
476 new (in 2.3) optional \var{optionflags} argument. Some years after
477 the integer spellings of booleans are history, this hack will
478 probably be removed again.
479
Fred Drakec1158352001-06-11 14:55:01 +0000480\end{enumerate}
481
Tim Peters76882292001-02-17 05:58:44 +0000482
483\subsection{Soapbox}
484
485The first word in doctest is "doc", and that's why the author wrote
486doctest: to keep documentation up to date. It so happens that doctest
487makes a pleasant unit testing environment, but that's not its primary
488purpose.
489
490Choose docstring examples with care. There's an art to this that needs to
491be learned --- it may not be natural at first. Examples should add genuine
492value to the documentation. A good example can often be worth many words.
493If possible, show just a few normal cases, show endcases, show interesting
494subtle cases, and show an example of each kind of exception that can be
495raised. You're probably testing for endcases and subtle cases anyway in an
496interactive shell: doctest wants to make it as easy as possible to capture
497those sessions, and will verify they continue to work as designed forever
498after.
499
500If done with care, the examples will be invaluable for your users, and will
501pay back the time it takes to collect them many times over as the years go
502by and "things change". I'm still amazed at how often one of my doctest
503examples stops working after a "harmless" change.
504
505For exhaustive testing, or testing boring cases that add no value to the
Fred Drake7eb14632001-02-17 17:32:41 +0000506docs, define a \code{__test__} dict instead. That's what it's for.