This is a copy of the bug I filed on the python issuetracker here[1]. I
apologize if I filed in the wrong place. I'm not sure which is the correct
tracker for this library.
If one of the mock.patch methods is used with autospec=True on a staticmethod
in an object, the mock library determines that it is not callable by checking
for the __call__ attribute. This results in a NonCallableMagicMock being
returned which of course dies with the following error when the mocked method
is called:
TypeError: 'NonCallableMagicMock' object is not callable
It seems that the create_autospec needs to special case for classmethod and
staticmethod.
The following change seems to fix it, however I am only vaguely familiar with
the internals of mock so I'm not sure what this breaks.
diff -r d356250e275d mock.py
--- a/mock.py Tue Apr 09 14:53:33 2013 +0100
+++ b/mock.py Wed Dec 17 07:35:15 2014 -0800
@@ -2191,7 +2191,8 @@
# descriptors don't have a spec
# because we don't know what type they return
_kwargs = {}
- elif not _callable(spec):
+ elif not _callable(spec) and not isinstance(spec, (staticmethod,
+ classmethod)):
Klass = NonCallableMagicMock
elif is_type and instance and not _instance_callable(spec):
Klass = NonCallableMagicMock
1. http://bugs.python.org/issue23078
Original issue reported on code.google.com by blak...@gmail.com on 18 Dec 2014 at 8:48
Original issue reported on code.google.com by
blak...@gmail.com
on 18 Dec 2014 at 8:48