doctest.DocTestCase.debug

DocTestCase.debug()[source]

Run the test case without results and without catching exceptions

The unit test framework includes a debug method on test cases and test suites to support post-mortem debugging. The test code is run in such a way that errors are not caught. This way a caller can catch the errors and initiate post-mortem debugging.

The DocTestCase provides a debug method that raises UnexpectedException errors if there is an unexpected exception:

>>> test = DocTestParser().get_doctest('>>> raise KeyError\n42',
...                {}, 'foo', 'foo.py', 0)
>>> case = DocTestCase(test)
>>> try:
...     case.debug()
... except UnexpectedException, failure:
...     pass

The UnexpectedException contains the test, the example, and the original exception:

>>> 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

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

>>> test = DocTestParser().get_doctest('''
...      >>> x = 1
...      >>> x
...      2
...      ''', {}, 'foo', 'foo.py', 0)
>>> case = DocTestCase(test)
>>> try:
...    case.debug()
... 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'