Class
zope.testing.doctest.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
{}

Base classes

Implemented Interfaces

There are no implemented interfaces.

Attributes/Properties

Methods

Known Subclasses

There are no known subclasses.