summaryrefslogtreecommitdiffstats
path: root/Lib/unittest
diff options
context:
space:
mode:
authorMichael Foord <michael@voidspace.org.uk>2012-03-25 18:53:18 (GMT)
committerMichael Foord <michael@voidspace.org.uk>2012-03-25 18:53:18 (GMT)
commite58a562d9395b8a4ed9419b735cad9f78c8ae802 (patch)
tree120e3cd3e4a8d791a17669c96d28068fcf9bce8c /Lib/unittest
parent87b3caf873a45fd836982296374f5b4e49dd9e30 (diff)
downloadcpython-e58a562d9395b8a4ed9419b735cad9f78c8ae802.zip
cpython-e58a562d9395b8a4ed9419b735cad9f78c8ae802.tar.gz
cpython-e58a562d9395b8a4ed9419b735cad9f78c8ae802.tar.bz2
unittest.mock: a mock created by patch with a spec as the list argument will be callable if __call__ is in the spec
Diffstat (limited to 'Lib/unittest')
-rw-r--r--Lib/unittest/mock.py9
-rw-r--r--Lib/unittest/test/testmock/testpatch.py20
2 files changed, 28 insertions, 1 deletions
diff --git a/Lib/unittest/mock.py b/Lib/unittest/mock.py
index d73bd53..4809dba 100644
--- a/Lib/unittest/mock.py
+++ b/Lib/unittest/mock.py
@@ -1166,7 +1166,14 @@ class _patch(object):
if new_callable is not None:
Klass = new_callable
elif spec is not None or spec_set is not None:
- if not _callable(spec or spec_set):
+ this_spec = spec
+ if spec_set is not None:
+ this_spec = spec_set
+ if _is_list(this_spec):
+ not_callable = '__call__' not in this_spec
+ else:
+ not_callable = not callable(this_spec)
+ if not_callable:
Klass = NonCallableMagicMock
if spec is not None:
diff --git a/Lib/unittest/test/testmock/testpatch.py b/Lib/unittest/test/testmock/testpatch.py
index 204a30a..6256855 100644
--- a/Lib/unittest/test/testmock/testpatch.py
+++ b/Lib/unittest/test/testmock/testpatch.py
@@ -1742,6 +1742,26 @@ class PatchTest(unittest.TestCase):
p.stop()
+ def test_callable_spec_as_list(self):
+ spec = ('__call__',)
+ p = patch(MODNAME, spec=spec)
+ m = p.start()
+ try:
+ self.assertTrue(callable(m))
+ finally:
+ p.stop()
+
+
+ def test_not_callable_spec_as_list(self):
+ spec = ('foo', 'bar')
+ p = patch(MODNAME, spec=spec)
+ m = p.start()
+ try:
+ self.assertFalse(callable(m))
+ finally:
+ p.stop()
+
+
if __name__ == '__main__':
unittest.main()