summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorRan Benita <ran@unusedvar.com>2021-01-01 13:10:43 +0200
committerRan Benita <ran@unusedvar.com>2021-01-24 14:08:39 +0200
commitbb3d43c9a6d16174a05058686b9460ceff911e5a (patch)
tree17c91ab0806a527995cd628fdbd2f08715e99bf7 /src
parent14d71b2c228c3ee92a1e7aa93a6ea64444f19697 (diff)
downloadpytest-bb3d43c9a6d16174a05058686b9460ceff911e5a.tar.gz
runner: ensure item.teardown() is called even if a finalizer raised
If one finalizer fails, all of the subsequent finalizers still run, so the `teardown()` method should behave the same.
Diffstat (limited to 'src')
-rw-r--r--src/_pytest/runner.py6
1 files changed, 3 insertions, 3 deletions
diff --git a/src/_pytest/runner.py b/src/_pytest/runner.py
index b25438c23..c221b42a0 100644
--- a/src/_pytest/runner.py
+++ b/src/_pytest/runner.py
@@ -446,6 +446,7 @@ class SetupState:
try:
colitem = self.stack.pop()
finalizers = self._finalizers.pop(colitem)
+ finalizers.insert(0, colitem.teardown)
inner_exc = None
while finalizers:
fin = finalizers.pop()
@@ -456,11 +457,10 @@ class SetupState:
# ideally all should be reported.
if inner_exc is None:
inner_exc = e
- if inner_exc:
- raise inner_exc
- colitem.teardown()
for colitem in self._finalizers:
assert colitem in self.stack
+ if inner_exc:
+ raise inner_exc
except TEST_OUTCOME as e:
# XXX Only first exception will be seen by user,
# ideally all should be reported.