Fix fixtures named teardown being considered by nose (#10696)
Closes #10597
This commit is contained in:
parent
86a1beba07
commit
5dbfb8e108
1
AUTHORS
1
AUTHORS
|
@ -348,6 +348,7 @@ Thomas Grainger
|
||||||
Thomas Hisch
|
Thomas Hisch
|
||||||
Tim Hoffmann
|
Tim Hoffmann
|
||||||
Tim Strazny
|
Tim Strazny
|
||||||
|
TJ Bruno
|
||||||
Tobias Diez
|
Tobias Diez
|
||||||
Tom Dalton
|
Tom Dalton
|
||||||
Tom Viner
|
Tom Viner
|
||||||
|
|
|
@ -0,0 +1 @@
|
||||||
|
Fix bug where a fixture method named ``teardown`` would be called as part of ``nose`` teardown stage.
|
|
@ -847,7 +847,7 @@ class Class(PyCollector):
|
||||||
other fixtures (#517).
|
other fixtures (#517).
|
||||||
"""
|
"""
|
||||||
setup_class = _get_first_non_fixture_func(self.obj, ("setup_class",))
|
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:
|
if setup_class is None and teardown_class is None:
|
||||||
return
|
return
|
||||||
|
|
||||||
|
@ -884,12 +884,12 @@ class Class(PyCollector):
|
||||||
emit_nose_setup_warning = True
|
emit_nose_setup_warning = True
|
||||||
setup_method = _get_first_non_fixture_func(self.obj, (setup_name,))
|
setup_method = _get_first_non_fixture_func(self.obj, (setup_name,))
|
||||||
teardown_name = "teardown_method"
|
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
|
emit_nose_teardown_warning = False
|
||||||
if teardown_method is None and has_nose:
|
if teardown_method is None and has_nose:
|
||||||
teardown_name = "teardown"
|
teardown_name = "teardown"
|
||||||
emit_nose_teardown_warning = True
|
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:
|
if setup_method is None and teardown_method is None:
|
||||||
return
|
return
|
||||||
|
|
||||||
|
|
|
@ -496,3 +496,24 @@ def test_nose_setup_skipped_if_non_callable(pytester: Pytester) -> None:
|
||||||
)
|
)
|
||||||
result = pytester.runpytest(p, "-p", "nose")
|
result = pytester.runpytest(p, "-p", "nose")
|
||||||
assert result.ret == 0
|
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
|
||||||
|
|
Loading…
Reference in New Issue