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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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.
答案

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个电话。

以上是关于magicmock多次调用,但我无法断言调用的主要内容,如果未能解决你的问题,请参考以下文章

Xcode 理解如何分析调用栈

断言未使用 Mock 调用函数/方法

forEach on map function js断言测试未运行

慢斯卡拉断言

UITableView selectRowAtIndexPath 的断言失败

使用mock模拟解决测试中依赖问题