fix #4400 - rearrange the handling of yield test warnings/errors

This commit is contained in:
Ronny Pfannschmidt 2018-11-16 13:18:11 +01:00
parent 9dec146edf
commit 950d30e6e0
3 changed files with 9 additions and 6 deletions

View File

@ -0,0 +1 @@
Rearrange warning handling for the yield test errors so the opt-out in 4.0.x correctly works.

View File

@ -741,16 +741,20 @@ class FunctionMixin(PyobjMixin):
class Generator(FunctionMixin, PyCollector): class Generator(FunctionMixin, PyCollector):
def collect(self): def collect(self):
# test generators are seen as collectors but they also # test generators are seen as collectors but they also
# invoke setup/teardown on popular request # invoke setup/teardown on popular request
# (induced by the common "test_*" naming shared with normal tests) # (induced by the common "test_*" naming shared with normal tests)
from _pytest import deprecated from _pytest import deprecated
self.warn(deprecated.YIELD_TESTS)
self.session._setupstate.prepare(self) self.session._setupstate.prepare(self)
# see FunctionMixin.setup and test_setupstate_is_preserved_134 # see FunctionMixin.setup and test_setupstate_is_preserved_134
self._preservedparent = self.parent.obj self._preservedparent = self.parent.obj
values = [] values = []
seen = {} seen = {}
_Function = self._getcustomclass("Function")
for i, x in enumerate(self.obj()): for i, x in enumerate(self.obj()):
name, call, args = self.getcallargs(x) name, call, args = self.getcallargs(x)
if not callable(call): if not callable(call):
@ -764,11 +768,7 @@ class Generator(FunctionMixin, PyCollector):
"%r generated tests with non-unique name %r" % (self, name) "%r generated tests with non-unique name %r" % (self, name)
) )
seen[name] = True seen[name] = True
with warnings.catch_warnings(): values.append(_Function(name, self, args=args, callobj=call))
# ignore our own deprecation warning
function_class = self.Function
values.append(function_class(name, self, args=args, callobj=call))
self.warn(deprecated.YIELD_TESTS)
return values return values
def getcallargs(self, obj): def getcallargs(self, obj):

View File

@ -4,6 +4,7 @@ from __future__ import print_function
import pytest import pytest
from _pytest.main import EXIT_NOTESTSCOLLECTED from _pytest.main import EXIT_NOTESTSCOLLECTED
from _pytest.warnings import SHOW_PYTEST_WARNINGS_ARG
class SessionTests(object): class SessionTests(object):
@ -77,7 +78,8 @@ class SessionTests(object):
""" """
def test_1(): def test_1():
yield None yield None
""" """,
SHOW_PYTEST_WARNINGS_ARG,
) )
failures = reprec.getfailedcollections() failures = reprec.getfailedcollections()
out = failures[0].longrepr.reprcrash.message out = failures[0].longrepr.reprcrash.message