Skip to content

Commit

Permalink
Merge pull request #10698 from pytest-dev/backport-10696-to-7.2.x
Browse files Browse the repository at this point in the history
[7.2.x] Fix fixtures named teardown being considered by nose
  • Loading branch information
nicoddemus committed Jan 27, 2023
2 parents 4b83a05 + 432a60b commit d61f83c
Show file tree
Hide file tree
Showing 4 changed files with 26 additions and 3 deletions.
1 change: 1 addition & 0 deletions AUTHORS
Original file line number Diff line number Diff line change
Expand Up @@ -344,6 +344,7 @@ Thomas Grainger
Thomas Hisch
Tim Hoffmann
Tim Strazny
TJ Bruno
Tobias Diez
Tom Dalton
Tom Viner
Expand Down
1 change: 1 addition & 0 deletions changelog/10597.bugfix.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Fix bug where a fixture method named ``teardown`` would be called as part of ``nose`` teardown stage.
6 changes: 3 additions & 3 deletions src/_pytest/python.py
Original file line number Diff line number Diff line change
Expand Up @@ -848,7 +848,7 @@ def _inject_setup_class_fixture(self) -> None:
other fixtures (#517).
"""
setup_class = _get_first_non_fixture_func(self.obj, ("setup_class",))
teardown_class = getattr(self.obj, "teardown_class", None)
teardown_class = _get_first_non_fixture_func(self.obj, ("teardown_class",))
if setup_class is None and teardown_class is None:
return

Expand Down Expand Up @@ -885,12 +885,12 @@ def _inject_setup_method_fixture(self) -> None:
emit_nose_setup_warning = True
setup_method = _get_first_non_fixture_func(self.obj, (setup_name,))
teardown_name = "teardown_method"
teardown_method = getattr(self.obj, teardown_name, None)
teardown_method = _get_first_non_fixture_func(self.obj, (teardown_name,))
emit_nose_teardown_warning = False
if teardown_method is None and has_nose:
teardown_name = "teardown"
emit_nose_teardown_warning = True
teardown_method = getattr(self.obj, teardown_name, None)
teardown_method = _get_first_non_fixture_func(self.obj, (teardown_name,))
if setup_method is None and teardown_method is None:
return

Expand Down
21 changes: 21 additions & 0 deletions testing/test_nose.py
Original file line number Diff line number Diff line change
Expand Up @@ -496,3 +496,24 @@ def test_it():
)
result = pytester.runpytest(p, "-p", "nose")
assert result.ret == 0


@pytest.mark.parametrize("fixture_name", ("teardown", "teardown_class"))
def test_teardown_fixture_not_called_directly(fixture_name, pytester: Pytester) -> None:
"""Regression test for #10597."""
p = pytester.makepyfile(
f"""
import pytest
class TestHello:
@pytest.fixture
def {fixture_name}(self):
yield
def test_hello(self, {fixture_name}):
assert True
"""
)
result = pytester.runpytest(p, "-p", "nose")
assert result.ret == 0

0 comments on commit d61f83c

Please sign in to comment.