我使用Python 2.6.6Python的補丁模擬似乎被調用,但斷言失敗
我想要做的就是使用模擬替換對象的創建,以確保正確的通話已完成。應該是直截了當的。
我的模塊:
import dir.SubModule
class Cls(object):
def Start(self):
self.__obj = dir.SubModule.SubCls()
self.__obj.foo()
我的測試:
import MyModule
import unittest
from mock import Mock, MagicMock, patch
class MyTest(unittest.TestCase):
def setUp(self):
self.uut = MyModule.Cls()
def test_one(self):
with patch('dir.SubModule.SubCls', spec=True) as mockObj:
print "mock calls before"
print mockObj.mock_calls
self.uut.Start()
print "called: " + str(mockObj.called)
print "foo called: " + str(mockObj.foo.called)
print "call_count: " + str(mockObj.call_count)
print "call_args: " + str(mockObj.call_args)
print "args_list: " + str(mockObj.call_args_list)
print "mock calls:\n" + str(mockObj.mock_calls)
print "method calls:\n " + str(mockObj.method_calls)
輸出是:
mock calls before:
[]
called: True
foo called: False
call_count: 1
call_args: call()
args_list: [call()]
mock calls:
[call(), call().foo()]
method calls:
[]
然而,測試失敗:
AssertionError: Expected call: foo()
Not called
我不明白這個模擬可以如何報告電話已經發出,但我不能斷言他們被呼叫。我錯過了什麼?
編輯: 加入所有指標的報告後,似乎有一些基本的東西我誤解了Python的嘲笑。如果foo()在調用列表中,那麼爲什麼調用只計算1,爲什麼foo.called報告爲「False」?
你已經發布的代碼似乎並不符合你的代碼實際上跑得夠好,我們可以幫助你。它看起來像你發佈的代碼有一個完全不同的錯誤集。 – user2357112
我發現的唯一錯誤是我在創建uut對象前丟失了setUp()聲明;否則它是我正在運行的代碼,除了我已經刪除了其他不必要的對象和變量的創建和使用(我已經證明,因爲它已在我的代碼中註釋掉了)。 – PfunnyGuy