Skip to content

self.doCleanups() cannot be called from a test method of a unittest.IsolatedAsyncioTestCase subclass #101018

Description

@zware

Example:

importunittestevents= []
classTest(unittest.IsolatedAsyncioTestCase):
deftest(self):
events.append('started')
self.addCleanup(events.append, 'cleanup')
self.doCleanups()
events.append('end')
unittest.main(exit=False)
assertevents== ['started', 'cleanup', 'end'], events

The above passes in 3.9 and 3.10, but fails in 3.11 with

E
======================================================================
ERROR: test (__main__.Test)
----------------------------------------------------------------------
Traceback (most recent call last):
File "/.../cpython/Lib/unittest/async_case.py", line 75, in _callCleanup
self._callMaybeAsync(function, *args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/.../cpython/Lib/unittest/async_case.py", line 95, in _callMaybeAsync
return self._asyncioTestContext.run(func, *args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
RuntimeError: cannot enter context: <_contextvars.Context object at 0x7fb2f93a9900> is already entered
----------------------------------------------------------------------
Ran 1 test in 0.002s
FAILED (errors=1)
Traceback (most recent call last):
File "<stdin>", line 16, in <module>
AssertionError: ['started', 'end']

git bisect found the culprit to be gh-91150/GH-31837.

Metadata

Metadata

Assignees

No one assigned

    Labels

    3.13bugs and security fixes3.14bugs and security fixes3.15pre-release feature fixes, bugs and security fixesdocsDocumentation in the Doc dirstdlibStandard Library Python modules in the Lib/ directory

    Projects

    Status
    Todo
    Status
    Todo

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions