[New-bugs-announce] [issue26303] Shared execution context between doctests in a module

kernc report at bugs.python.org
Sat Feb 6 10:54:22 EST 2016

New submission from kernc:

The doctest execution context documentation [0] says the tests get shallow *copies* of module's globals, so one test can't mingle with results of another. This makes it impossible to make literate modules such as:

    This module is about reusable doctests context.

    Let's prepare something the later examples can work with:

    >>> import foo
    >>> result = foo.Something()
    class Bar:
        Class about something.

        >>> bar = Bar(foo)
        >>> bar.uses(foo)
        def baz(self):
            Returns 3.

            >>> result + bar.baz()
            return 3

I.e. one has to instantiate everything in every single test. The documentation says one can pass their own globals as `glob=your_dict`, but it doesn't mention the dict is *cleared* after the test run.

Please acknowledge the use case of doctests in a module sharing their environment and results sometimes legitimately exists, and to make it future-compatible, please amend the final paragraph of the relevant part of documentation [0] like so:

    You can force use of your own dict as the execution context by 
    passing `globs=your_dict` to `testmod()` or `testfile()` instead, 
    e.g., to have all doctests in a module use the _same_ execution
    context (sharing variables), define a context like so:
        class Context(dict):
            def copy(self):
                return self
            def clear(self):
    and use it, optionally prepopulated with `M`'s globals:

Thank you!

[0]: https://docs.python.org/3/library/doctest.html#what-s-the-execution-context

assignee: docs at python
components: Documentation
messages: 259731
nosy: docs at python, kernc
priority: normal
severity: normal
status: open
title: Shared execution context between doctests in a module
type: enhancement
versions: Python 3.6

Python tracker <report at bugs.python.org>

More information about the New-bugs-announce mailing list