Skip to content

Commit 7fc2cf5

Browse files
authored
Merge pull request #9441 from bluetech/nose-setup-callable
python: skip nose setup/teardown fixtures if non-callable
2 parents 09c0bee + 10e21da commit 7fc2cf5

File tree

2 files changed

+25
-0
lines changed

2 files changed

+25
-0
lines changed

src/_pytest/python.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -522,12 +522,18 @@ def _inject_setup_module_fixture(self) -> None:
522522
self.obj, ("setUpModule", "setup_module")
523523
)
524524
if setup_module is None and has_nose:
525+
# The name "setup" is too common - only treat as fixture if callable.
525526
setup_module = _get_first_non_fixture_func(self.obj, ("setup",))
527+
if not callable(setup_module):
528+
setup_module = None
526529
teardown_module = _get_first_non_fixture_func(
527530
self.obj, ("tearDownModule", "teardown_module")
528531
)
529532
if teardown_module is None and has_nose:
530533
teardown_module = _get_first_non_fixture_func(self.obj, ("teardown",))
534+
# Same as "setup" above - only treat as fixture if callable.
535+
if not callable(teardown_module):
536+
teardown_module = None
531537

532538
if setup_module is None and teardown_module is None:
533539
return

testing/test_nose.py

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -477,3 +477,22 @@ def test_raises_baseexception_caught():
477477
"* 1 failed, 2 passed *",
478478
]
479479
)
480+
481+
482+
def test_nose_setup_skipped_if_non_callable(pytester: Pytester) -> None:
483+
"""Regression test for #9391."""
484+
p = pytester.makepyfile(
485+
__init__="",
486+
setup="""
487+
""",
488+
teardown="""
489+
""",
490+
test_it="""
491+
from . import setup, teardown
492+
493+
def test_it():
494+
pass
495+
""",
496+
)
497+
result = pytester.runpytest(p, "-p", "nose")
498+
assert result.ret == 0

0 commit comments

Comments
 (0)