你能做的就是把你的模拟放在一个新的Mock()
对象并检查新模拟的模拟调用。也许举个例子更容易理解:
>>> from unittest.mock import *
>>> m0, m1 = Mock(), Mock()
>>> m = Mock()
>>> m.m0, m.m1 = m0, m1
>>> m0()
<Mock name='mock.m0()' id='140660445334224'>
>>> m1()
<Mock name='mock.m1()' id='140660445334608'>
>>> m.mock_calls
[call.m0(), call.m1()]
好的,现在我们处于有利位置:我们可以检查以下呼叫m
验证顺序是否正确:
>>> m.assert_has_calls([call.m0(), call.m1()])
>>> m.assert_has_calls([call.m1(), call.m0()])
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/local/lib/python2.7/dist-packages/mock.py", line 863, in assert_has_calls
'Actual: %r' % (calls, self.mock_calls)
AssertionError: Calls not found.
Expected: [call.m1(), call.m0()]
Actual: [call.m0(), call.m1()]
正如我们想要的,第一遍和逆序失败。
当你使用patch
只需获取补丁返回的模拟并将它们放入新的Mock()
作为容器。检查记录子呼叫顺序的容器。