MagicMock被多次调用,但无法断言调用参数
(Python 2.6)
我有一个方法:
def send_all(self, messages):
for message in messages:
queue.send(message)
我想确认每条消息都调用了 queue.send()
方法
queue = MagicMock()
myobj= MyObject(queue)
myobj.send_all(test_messages)
for test_message in test_messages:
queue.send.assert_called_once_with(test_message)
在 test_messages
中的55条消息都是独一无二的。我遇到了以下错误:
AssertionError: Expected to be called once. Called 55 times.
1 个回答
4
assert_called_once_with()
是用来检查你的模拟对象(mock)是否只被调用了一次的;不要用它来测试55次不同的调用。
相反,你应该使用 mock.assert_has_calls()
方法来确认这55次调用确实发生过:
queue.send.assert_has_calls([call(test_message) for test_message in test_messages])
这个方法会检查这55次调用的顺序是否存在;它并不限制模拟对象只能被调用一次。
你也可以检查 mock.mock_calls
属性:
assert queue.send.mock_calls == [call(test_message) for test_message in test_messages]
这样可以准确测试这55次调用是否全部发生过。