Merge pull request #3500 from RonnyPfannschmidt/fix-3498-unittest-marks
fix #3498 - correctly consider marks on unittest classes
This commit is contained in:
commit
48215fdcb9
|
@ -984,7 +984,7 @@ class FixtureManager(object):
|
||||||
session.config.pluginmanager.register(self, "funcmanage")
|
session.config.pluginmanager.register(self, "funcmanage")
|
||||||
|
|
||||||
def getfixtureinfo(self, node, func, cls, funcargs=True):
|
def getfixtureinfo(self, node, func, cls, funcargs=True):
|
||||||
if funcargs and not hasattr(node, "nofuncargs"):
|
if funcargs and not getattr(node, "nofuncargs", False):
|
||||||
argnames = getfuncargnames(func, cls=cls)
|
argnames = getfuncargnames(func, cls=cls)
|
||||||
else:
|
else:
|
||||||
argnames = ()
|
argnames = ()
|
||||||
|
|
|
@ -1155,7 +1155,7 @@ class Function(FunctionMixin, nodes.Item, fixtures.FuncargnamesCompatAttr):
|
||||||
|
|
||||||
if fixtureinfo is None:
|
if fixtureinfo is None:
|
||||||
fixtureinfo = self.session._fixturemanager.getfixtureinfo(
|
fixtureinfo = self.session._fixturemanager.getfixtureinfo(
|
||||||
self.parent, self.obj, self.cls,
|
self, self.obj, self.cls,
|
||||||
funcargs=not self._isyieldedfunction())
|
funcargs=not self._isyieldedfunction())
|
||||||
self._fixtureinfo = fixtureinfo
|
self._fixtureinfo = fixtureinfo
|
||||||
self.fixturenames = fixtureinfo.names_closure
|
self.fixturenames = fixtureinfo.names_closure
|
||||||
|
|
|
@ -54,7 +54,7 @@ class UnitTestCase(Class):
|
||||||
continue
|
continue
|
||||||
funcobj = getattr(x, 'im_func', x)
|
funcobj = getattr(x, 'im_func', x)
|
||||||
transfer_markers(funcobj, cls, module)
|
transfer_markers(funcobj, cls, module)
|
||||||
yield TestCaseFunction(name, parent=self)
|
yield TestCaseFunction(name, parent=self, callobj=funcobj)
|
||||||
foundsomething = True
|
foundsomething = True
|
||||||
|
|
||||||
if not foundsomething:
|
if not foundsomething:
|
||||||
|
@ -66,6 +66,7 @@ class UnitTestCase(Class):
|
||||||
|
|
||||||
|
|
||||||
class TestCaseFunction(Function):
|
class TestCaseFunction(Function):
|
||||||
|
nofuncargs = True
|
||||||
_excinfo = None
|
_excinfo = None
|
||||||
|
|
||||||
def setup(self):
|
def setup(self):
|
||||||
|
|
|
@ -0,0 +1 @@
|
||||||
|
Fix ``usefixtures`` mark applyed to unittest tests by correctly instantiating ``FixtureInfo``.
|
|
@ -828,3 +828,64 @@ def test_class_method_containing_test_issue1558(testdir):
|
||||||
""")
|
""")
|
||||||
reprec = testdir.inline_run()
|
reprec = testdir.inline_run()
|
||||||
reprec.assertoutcome(passed=1)
|
reprec.assertoutcome(passed=1)
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.issue(3498)
|
||||||
|
@pytest.mark.parametrize("base", [
|
||||||
|
'six.moves.builtins.object',
|
||||||
|
'unittest.TestCase',
|
||||||
|
'unittest2.TestCase',
|
||||||
|
])
|
||||||
|
def test_usefixtures_marker_on_unittest(base, testdir):
|
||||||
|
module = base.rsplit('.', 1)[0]
|
||||||
|
pytest.importorskip(module)
|
||||||
|
testdir.makepyfile(conftest="""
|
||||||
|
import pytest
|
||||||
|
|
||||||
|
@pytest.fixture(scope='function')
|
||||||
|
def fixture1(request, monkeypatch):
|
||||||
|
monkeypatch.setattr(request.instance, 'fixture1', True )
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.fixture(scope='function')
|
||||||
|
def fixture2(request, monkeypatch):
|
||||||
|
monkeypatch.setattr(request.instance, 'fixture2', True )
|
||||||
|
|
||||||
|
def node_and_marks(item):
|
||||||
|
print(item.nodeid)
|
||||||
|
for mark in item.iter_markers():
|
||||||
|
print(" ", mark)
|
||||||
|
|
||||||
|
@pytest.fixture(autouse=True)
|
||||||
|
def my_marks(request):
|
||||||
|
node_and_marks(request.node)
|
||||||
|
|
||||||
|
def pytest_collection_modifyitems(items):
|
||||||
|
for item in items:
|
||||||
|
node_and_marks(item)
|
||||||
|
|
||||||
|
""")
|
||||||
|
|
||||||
|
testdir.makepyfile("""
|
||||||
|
import pytest
|
||||||
|
import {module}
|
||||||
|
|
||||||
|
class Tests({base}):
|
||||||
|
fixture1 = False
|
||||||
|
fixture2 = False
|
||||||
|
|
||||||
|
@pytest.mark.usefixtures("fixture1")
|
||||||
|
def test_one(self):
|
||||||
|
assert self.fixture1
|
||||||
|
assert not self.fixture2
|
||||||
|
|
||||||
|
@pytest.mark.usefixtures("fixture1", "fixture2")
|
||||||
|
def test_two(self):
|
||||||
|
assert self.fixture1
|
||||||
|
assert self.fixture2
|
||||||
|
|
||||||
|
|
||||||
|
""".format(module=module, base=base))
|
||||||
|
|
||||||
|
result = testdir.runpytest('-s')
|
||||||
|
result.assert_outcomes(passed=2)
|
||||||
|
|
Loading…
Reference in New Issue