Skip to content

Commit 19a2f74

Browse files
authored
Merge pull request #8399 from atzannes/master
closes #8394 Generated fixture names for unittest/xunit/nose should start with underscore
1 parent 6e7dc8b commit 19a2f74

File tree

5 files changed

+74
-5
lines changed

5 files changed

+74
-5
lines changed

changelog/8394.bugfix.rst

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
Use private names for internal fixtures that handle classic setup/teardown so that they don't show up with the default ``--fixtures`` invocation (but they still show up with ``--fixtures -v``).

src/_pytest/python.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -528,7 +528,7 @@ def _inject_setup_module_fixture(self) -> None:
528528
autouse=True,
529529
scope="module",
530530
# Use a unique name to speed up lookup.
531-
name=f"xunit_setup_module_fixture_{self.obj.__name__}",
531+
name=f"_xunit_setup_module_fixture_{self.obj.__name__}",
532532
)
533533
def xunit_setup_module_fixture(request) -> Generator[None, None, None]:
534534
if setup_module is not None:
@@ -557,7 +557,7 @@ def _inject_setup_function_fixture(self) -> None:
557557
autouse=True,
558558
scope="function",
559559
# Use a unique name to speed up lookup.
560-
name=f"xunit_setup_function_fixture_{self.obj.__name__}",
560+
name=f"_xunit_setup_function_fixture_{self.obj.__name__}",
561561
)
562562
def xunit_setup_function_fixture(request) -> Generator[None, None, None]:
563563
if request.instance is not None:
@@ -809,7 +809,7 @@ def _inject_setup_class_fixture(self) -> None:
809809
autouse=True,
810810
scope="class",
811811
# Use a unique name to speed up lookup.
812-
name=f"xunit_setup_class_fixture_{self.obj.__qualname__}",
812+
name=f"_xunit_setup_class_fixture_{self.obj.__qualname__}",
813813
)
814814
def xunit_setup_class_fixture(cls) -> Generator[None, None, None]:
815815
if setup_class is not None:
@@ -838,7 +838,7 @@ def _inject_setup_method_fixture(self) -> None:
838838
autouse=True,
839839
scope="function",
840840
# Use a unique name to speed up lookup.
841-
name=f"xunit_setup_method_fixture_{self.obj.__qualname__}",
841+
name=f"_xunit_setup_method_fixture_{self.obj.__qualname__}",
842842
)
843843
def xunit_setup_method_fixture(self, request) -> Generator[None, None, None]:
844844
method = request.function

src/_pytest/unittest.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -144,7 +144,7 @@ def cleanup(*args):
144144
scope=scope,
145145
autouse=True,
146146
# Use a unique name to speed up lookup.
147-
name=f"unittest_{setup_name}_fixture_{obj.__qualname__}",
147+
name=f"_unittest_{setup_name}_fixture_{obj.__qualname__}",
148148
)
149149
def fixture(self, request: FixtureRequest) -> Generator[None, None, None]:
150150
if _is_skipped(self):

testing/test_nose.py

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -211,6 +211,50 @@ def test_world():
211211
result.stdout.fnmatch_lines(["*2 passed*"])
212212

213213

214+
def test_fixtures_nose_setup_issue8394(pytester: Pytester) -> None:
215+
pytester.makepyfile(
216+
"""
217+
def setup_module():
218+
pass
219+
220+
def teardown_module():
221+
pass
222+
223+
def setup_function(func):
224+
pass
225+
226+
def teardown_function(func):
227+
pass
228+
229+
def test_world():
230+
pass
231+
232+
class Test(object):
233+
def setup_class(cls):
234+
pass
235+
236+
def teardown_class(cls):
237+
pass
238+
239+
def setup_method(self, meth):
240+
pass
241+
242+
def teardown_method(self, meth):
243+
pass
244+
245+
def test_method(self): pass
246+
"""
247+
)
248+
match = "*no docstring available*"
249+
result = pytester.runpytest("--fixtures")
250+
assert result.ret == 0
251+
result.stdout.no_fnmatch_line(match)
252+
253+
result = pytester.runpytest("--fixtures", "-v")
254+
assert result.ret == 0
255+
result.stdout.fnmatch_lines([match, match, match, match])
256+
257+
214258
def test_nose_setup_ordering(pytester: Pytester) -> None:
215259
pytester.makepyfile(
216260
"""

testing/test_unittest.py

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -302,6 +302,30 @@ def test_teareddown():
302302
reprec.assertoutcome(passed=3)
303303

304304

305+
def test_fixtures_setup_setUpClass_issue8394(pytester: Pytester) -> None:
306+
pytester.makepyfile(
307+
"""
308+
import unittest
309+
class MyTestCase(unittest.TestCase):
310+
@classmethod
311+
def setUpClass(cls):
312+
pass
313+
def test_func1(self):
314+
pass
315+
@classmethod
316+
def tearDownClass(cls):
317+
pass
318+
"""
319+
)
320+
result = pytester.runpytest("--fixtures")
321+
assert result.ret == 0
322+
result.stdout.no_fnmatch_line("*no docstring available*")
323+
324+
result = pytester.runpytest("--fixtures", "-v")
325+
assert result.ret == 0
326+
result.stdout.fnmatch_lines(["*no docstring available*"])
327+
328+
305329
def test_setup_class(pytester: Pytester) -> None:
306330
testpath = pytester.makepyfile(
307331
"""

0 commit comments

Comments
 (0)