2016-12-06 156 views
1

我在設置單元測試時遇到了很多困難。我一直在使用補丁,但它的行爲並不像預期的那樣完全。爲什麼assert_called_with失敗?

我在我的測試功能的頂部裝飾: @mock.patch('WarningFactory.WarningAPIUpdate') @mock.patch('WarningFactory.SomethingElse') def test_send_tc_update(self, other_mock, api_mock):

然而,當我的函數結束時,我嘗試做如下聲明:

api_mock.send_warning.assert_called_with('IDQ20026', 'IDQ20026')

它失敗

我知道應該通過因爲我跑

print api_mock.mock_calls

給人

[call(u'test_api'), call().send_warning('IDQ20026', 'IDQ20026'), call().send_warning('IDQ24500', 'IDQ24500')]

我可以清楚地看到send_warning方法被調用正確的價值觀,所以爲什麼我的斷言失敗?

+0

你有沒有想過這一個?有同樣的問題 – learningKnight

+0

@learningKnight添加了一個答案,希望有所幫助。 – user3559247

回答

0

現在回顧問題是,assert_called_with只檢查最近的呼叫。

assert_any_call(* args,** kwargs)¶聲明模擬已被調用 指定的參數。

斷言通過,如果模仿曾經被稱爲,不像 assert_called_with()和assert_called_once_with(),只有當 呼叫最近的一次傳球,並在 assert_called_once_with(的情況下),它也必須是唯一的電話。

該文檔是有點狡猾,因爲他們不提這個assert_called_with方法下。

我結束了對我的測試使用assert_any_call方法。