magicmock多次调用,但我无法断言调用

问题描述 投票:0回答:1

(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.
python unit-testing mocking
1个回答
3
投票

assert_called_once_with()测试你的模拟只被调用一次;不要用它来测试55个不同的电话。

相反,声称这些55次调用是使用mock.assert_has_calls()方法进行的:

queue.send.assert_has_calls([call(test_message) for test_message in test_messages])

这将测试是否存在55个调用序列;它不会限制模拟被多次调用。

你也可以测试mock.mock_calls attribute

assert queue.send.mock_calls == [call(test_message) for test_message in test_messages]

这将测试这55个电话。

最新问题
© www.soinside.com 2019 - 2024. All rights reserved.