[TIP] I don't get it?

WW teetee at gmail.com
Tue Nov 2 08:34:24 PDT 2010


Hello,

This is my first time using the python mock library and I'm a little
confused.  I'd like to provide some guarantees that my mocks are being
called with the correct number of arguments.  The documentation seems to
indicate there are two ways to do this, "spec" and "mocksignature", but it's
a little unclear to me what the difference is supposed to be between them.

I find myself using the @patch.object decorator almost all the time, because
the modules I'm testing use a lot of top-level functions from modules
they've imported.  When I do something like this:

@patch.object(somemodule, 'somemethod', spec=True)

It doesn't seem to have any effect; I can call somemodule.somemethod with
any combination of invalid arguments and no exceptions are thrown.  However,
when I do:

@patch.object(somemodule, 'somemethod', mocksignature=True)

I get:

Traceback (most recent call last):
  File "/usr/lib/python2.6/site-
packages/mock-0.7.0b3-py2.6.egg/mock.py", line 485, in patched
    arg = patching.__enter__()
  File "/usr/lib/python2.6/site-packages/mock-0.7.0b3-py2.6.egg/mock.py",
line 536, in __enter__
    new_attr = mocksignature(original, new)
  File "/usr/lib/python2.6/site-packages/mock-0.7.0b3-py2.6.egg/mock.py",
line 140, in mocksignature
    signature, func = _getsignature(func, skipfirst)
  File "/usr/lib/python2.6/site-packages/mock-0.7.0b3-py2.6.egg/mock.py",
line 87, in _getsignature
    func = func.__call__
AttributeError: 'SentinelObject' object has no attribute '__call__'

What am I missing here?

Thanks for your help.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.idyll.org/pipermail/testing-in-python/attachments/20101102/8721b4e6/attachment.htm>


More information about the testing-in-python mailing list