2
這用於使用python模擬版本1.0.1,但在升級到模擬版本1.3.0後開始失敗。我在Mac OS X Yosemite 10.10.5上運行Python 2.7.10版本。python-mock:缺少默認值的'self'參數
我減小邏輯從現有生產測試以下僞測試再現的問題:
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")
故障輸出看起來像這樣:
$ 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/Python.app/Contents/MacOS/Python
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 = <new_mock_test.MyTestCase testMethod=testDoStuff>, myClassMock = <MagicMock name='MyClass' spec='MyClass' id='4367040848'>
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 ===========================================================================
請格式化您的問題 – manetsus