Skip to content

Commit

Permalink
unittest: fix assertion errors on unittest reruns
Browse files Browse the repository at this point in the history
This fixes unittest test reruns when using plugins like
pytest-rerunfailures.

The `instance` property uses AttributeError to check if the instance
needs to be initialized, so `del` is the correct way to clear it, not
setting to `None`.

Regressed in 8.2.2.
  • Loading branch information
bluetech committed Jun 7, 2024
1 parent f941099 commit 5af8ae0
Show file tree
Hide file tree
Showing 4 changed files with 14 additions and 2 deletions.
1 change: 1 addition & 0 deletions changelog/12424.bugfix.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Fix crash with `assert testcase is not None` assertion failure when re-running unittest tests using plugins like pytest-rerunfailures. Regressed in 8.2.2.
2 changes: 1 addition & 1 deletion src/_pytest/unittest.py
Original file line number Diff line number Diff line change
Expand Up @@ -222,7 +222,7 @@ def teardown(self) -> None:
self._explicit_tearDown()
self._explicit_tearDown = None
self._obj = None
self._instance = None
del self._instance
super().teardown()

def startTest(self, testcase: "unittest.TestCase") -> None:
Expand Down
11 changes: 11 additions & 0 deletions testing/plugins_integration/pytest_rerunfailures_integration.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
import unittest


class MyTestCase(unittest.TestCase):
first_time = True

def test_fail_the_first_time(self) -> None:
"Regression test for issue #12424."
if self.first_time:
type(self).first_time = False
self.fail()
2 changes: 1 addition & 1 deletion tox.ini
Original file line number Diff line number Diff line change
Expand Up @@ -141,7 +141,7 @@ commands =
pytest --cov=. simple_integration.py
pytest --ds=django_settings simple_integration.py
pytest --html=simple.html simple_integration.py
pytest --reruns 5 simple_integration.py
pytest --reruns 5 simple_integration.py pytest_rerunfailures_integration.py
pytest pytest_anyio_integration.py
pytest pytest_asyncio_integration.py
pytest pytest_mock_integration.py
Expand Down

0 comments on commit 5af8ae0

Please sign in to comment.