Skip to content

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

Open
@zware

Description

@zware

Example:

import unittest events = [] class Test(unittest.IsolatedAsyncioTestCase): def test(self): events.append('started') self.addCleanup(events.append, 'cleanup') self.doCleanups() events.append('end') unittest.main(exit=False) assert events == ['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.11only security fixes3.12only security fixesstdlibPython modules in the Lib dirtopic-asynciotype-bugAn unexpected behavior, bug, or error

    Projects

    Status

    Todo

    Status

    Todo

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions