fix issue473: work around mock putting an unbound method into a class
dict when double-patching. --HG-- branch : issue473
This commit is contained in:
parent
ef7cb47b1e
commit
f91049cec9
|
@ -1,6 +1,9 @@
|
||||||
NEXT (2.6)
|
NEXT (2.6)
|
||||||
-----------------------------------
|
-----------------------------------
|
||||||
|
|
||||||
|
- fix issue473: work around mock putting an unbound method into a class
|
||||||
|
dict when double-patching.
|
||||||
|
|
||||||
- fix issue498: if a fixture finalizer fails, make sure that
|
- fix issue498: if a fixture finalizer fails, make sure that
|
||||||
the fixture is still invalidated.
|
the fixture is still invalidated.
|
||||||
|
|
||||||
|
|
|
@ -222,6 +222,8 @@ def pytest_pycollect_makeitem(__multicall__, collector, name, obj):
|
||||||
return Class(name, parent=collector)
|
return Class(name, parent=collector)
|
||||||
elif collector.funcnamefilter(name) and hasattr(obj, "__call__") and \
|
elif collector.funcnamefilter(name) and hasattr(obj, "__call__") and \
|
||||||
getfixturemarker(obj) is None:
|
getfixturemarker(obj) is None:
|
||||||
|
# mock seems to store unbound methods (issue473), let's normalize it
|
||||||
|
obj = getattr(obj, "__func__", obj)
|
||||||
if not isfunction(obj):
|
if not isfunction(obj):
|
||||||
collector.warn(code="C2", message=
|
collector.warn(code="C2", message=
|
||||||
"cannot collect %r because it is not a function."
|
"cannot collect %r because it is not a function."
|
||||||
|
|
|
@ -164,6 +164,21 @@ class TestMockDecoration:
|
||||||
names = [x.nodeid.split("::")[-1] for x in calls]
|
names = [x.nodeid.split("::")[-1] for x in calls]
|
||||||
assert names == ["test_one", "test_two", "test_three"]
|
assert names == ["test_one", "test_two", "test_three"]
|
||||||
|
|
||||||
|
def test_mock_double_patch_issue473(self, testdir):
|
||||||
|
testdir.makepyfile("""
|
||||||
|
from mock import patch
|
||||||
|
from pytest import mark
|
||||||
|
|
||||||
|
@patch('os.getcwd')
|
||||||
|
@patch('os.path')
|
||||||
|
@mark.slow
|
||||||
|
class TestSimple:
|
||||||
|
def test_simple_thing(self, mock_path, mock_getcwd):
|
||||||
|
pass
|
||||||
|
""")
|
||||||
|
res = testdir.inline_run()
|
||||||
|
res.assertoutcome(passed=1)
|
||||||
|
|
||||||
|
|
||||||
class TestReRunTests:
|
class TestReRunTests:
|
||||||
def test_rerun(self, testdir):
|
def test_rerun(self, testdir):
|
||||||
|
|
Loading…
Reference in New Issue