如何在不关心参数 unittest.mock 的情况下断言成员调用序列?

How to assert a sequence of member calls without caring for arguments with unittest.mock?

我希望声明一系列调用,而不关心给出的参数。有什么办法可以实现以下吗?

self.mocker = Mock()
self.mocker.increment = Mock()
self.mocker.decrement = Mock()

self.mocker.increment(2)
self.mocker.decrement(4)

expected_calls = [call.increment(ANY_ARGS), call.decrement(ANY_ARGS)]

self.mocker.assert_has_calls(expected_calls, any_order=False)

您希望查看 mock_calls list 并提取记录的每个通话的姓名。然后您可以断言调用了正确的方法名称,顺序为:

self.assertEqual([c[0] for c in self.mocker.mock_calls], ['increment', 'decrement'])

快速演示:

>>> from unittest import mock
>>> mocker = mock.Mock()
>>> mocker.increment(2)
<Mock name='mock.increment()' id='4546399144'>
>>> mocker.decrement(4)
<Mock name='mock.decrement()' id='4546398752'>
>>> mocker.mock_calls
[call.increment(2), call.decrement(4)]
>>> mocker.mock_calls[0][0]
'increment'
>>> [c[0] for c in mocker.mock_calls]
['increment', 'decrement']