Module doctest :: Class DebugRunner
[hide private]
[frames] | no frames]

_ClassType DebugRunner

DocTestRunner --+
                |
               DebugRunner

Run doc tests but raise an exception as soon as there is a failure.

If an unexpected exception occurs, an UnexpectedException is raised. It contains the test, the example, and the original exception:

>>> runner = DebugRunner(verbose=False)
>>> test = DocTestParser().get_doctest('>>> raise KeyError\n42',
...                                    {}, 'foo', 'foo.py', 0)
>>> try:
...     runner.run(test)
... except UnexpectedException, failure:
...     pass
>>> failure.test is test
True
>>> failure.example.want
'42\n'
>>> exc_info = failure.exc_info
>>> raise exc_info[0], exc_info[1], exc_info[2]
Traceback (most recent call last):
...
KeyError

We wrap the original exception to give the calling application access to the test and example information.

If the output doesn't match, then a DocTestFailure is raised:

>>> test = DocTestParser().get_doctest('''
...      >>> x = 1
...      >>> x
...      2
...      ''', {}, 'foo', 'foo.py', 0)
>>> try:
...    runner.run(test)
... except DocTestFailure, failure:
...    pass

DocTestFailure objects provide access to the test:

>>> failure.test is test
True

As well as to the example:

>>> failure.example.want
'2\n'

and the actual output:

>>> failure.got
'1\n'

If a failure or error occurs, the globals are left intact:

>>> del test.globs['__builtins__']
>>> test.globs
{'x': 1}
>>> test = DocTestParser().get_doctest('''
...      >>> x = 2
...      >>> raise KeyError
...      ''', {}, 'foo', 'foo.py', 0)
>>> runner.run(test)
Traceback (most recent call last):
...
UnexpectedException: <DocTest foo from foo.py:0 (2 examples)>
>>> del test.globs['__builtins__']
>>> test.globs
{'x': 2}

But the globals are cleared if there is no error:

>>> test = DocTestParser().get_doctest('''
...      >>> x = 2
...      ''', {}, 'foo', 'foo.py', 0)
>>> runner.run(test)
(0, 1)
>>> test.globs
{}
Instance Methods [hide private]
 
run(self, test, compileflags=None, out=None, clear_globs=True)
Run the examples in test, and display the results using the writer function out.
 
report_unexpected_exception(self, out, test, example, exc_info)
Report that the given example raised an unexpected exception.
 
report_failure(self, out, test, example, got)
Report that the given example failed.

Inherited from DocTestRunner: __init__, merge, report_start, report_success, summarize

Inherited from DocTestRunner (private): _failure_header

Class Variables [hide private]

Inherited from DocTestRunner: DIVIDER

Method Details [hide private]

run(self, test, compileflags=None, out=None, clear_globs=True)

 

Run the examples in test, and display the results using the writer function out.

The examples are run in the namespace test.globs. If clear\_globs is true (the default), then this namespace will be cleared after the test runs, to help with garbage collection. If you would like to examine the namespace after the test completes, then use clear\_globs=False.

compileflags gives the set of flags that should be used by the Python compiler when running the examples. If not specified, then it will default to the set of future-import flags that apply to globs.

The output of each example is checked using DocTestRunner.check\_output, and the results are formatted by the DocTestRunner.report\_* methods.

Overrides: DocTestRunner.run
(inherited documentation)

report_unexpected_exception(self, out, test, example, exc_info)

 
Report that the given example raised an unexpected exception.
Overrides: DocTestRunner.report_unexpected_exception
(inherited documentation)

report_failure(self, out, test, example, got)

 
Report that the given example failed.
Overrides: DocTestRunner.report_failure
(inherited documentation)