samedi 19 décembre 2015

Regression: 'self' parameter lacking default value

This used to work with python mock version 1.0.1, but started failing after I upgraded to mock version 1.3.0. I am running python version 2.7.10 on Mac OS X Yosemite 10.10.5.

I reduced the logic from an existing production test to the following dummy test that reproduces the issue:

import unittest

import mock
from mock import Mock, patch

class Outer(object):
    class MyClass(object):

        def doStuff(self, action):
            pass

@patch.object(Outer, "MyClass", autospec=True,
              return_value=Mock(spec_set=Outer.MyClass,
                                doStuff=Mock(spec_set=Outer.MyClass.doStuff)))

class MyTestCase(unittest.TestCase):
def testDoStuff(self, myClassMock):

    obj = myClassMock()

    obj.doStuff(action="swim")

    obj.doStuff.assert_called_once_with(action="swim")

The failure output looks like this:

$ py.test -v new_mock_test.py ====================================================================================== test session starts ======================================================================================= platform darwin -- Python 2.7.10, pytest-2.8.5, py-1.4.30, pluggy-0.3.1 -- /System/Library/Frameworks/Python.framework/Versions/2.7/Resources/http://ift.tt/19nRnBS cachedir: .cache rootdir: /Users/me/TempOnDesktop, inifile: plugins: cov-1.6, xdist-1.8 collected 1 items

new_mock_test.py::MyTestCase::testDoStuff FAILED

============================================================================================ FAILURES ============================================================================================ _____________________________________________________________________________________ MyTestCase.testDoStuff _____________________________________________________________________________________

self = , myClassMock =

def testDoStuff(self, myClassMock):

  obj = myClassMock()

  obj.doStuff(action="swim")

obj.doStuff.assert_called_once_with(action="swim")

new_mock_test.py:26:


../Library/Python/2.7/lib/python/site-packages/mock/mock.py:948: in assert_called_once_with return self.assert_called_with(*args, **kwargs) ../Library/Python/2.7/lib/python/site-packages/mock/mock.py:937: in assert_called_with six.raise_from(AssertionError(_error_message(cause)), cause)


value = AssertionError("Expected call: doStuff(action='swim')\nActual call: doStuff(action='swim')\n'self' parameter lacking default value",) from_value = TypeError("'self' parameter lacking default value",)

def raise_from(value, from_value):

  raise value

E AssertionError: Expected call: doStuff(action='swim') E Actual call: doStuff(action='swim') E 'self' parameter lacking default value

../Library/Python/2.7/lib/python/site-packages/six.py:718: AssertionError ========================================================================== 1 failed, 2 pytest-warnings in 0.13 seconds ===========================================================================

Aucun commentaire:

Enregistrer un commentaire