要测试一个对象的方法是否被正确地调用,通常会使用Mock对象和它的方法assert_called_with。但是,这个方法在测试多次调用时会出现问题,因为它总是从最后一次调用中获取参数,而不是从我们想要测试的调用中。
以下是解决此问题的代码示例:
from unittest.mock import Mock
def test_my_function():
my_mock = Mock()
my_mock.my_method(1, 2)
my_mock.my_method(3, 4)
# 使用call_args_list来获取所有调用的参数
calls = my_mock.mock_calls
assert calls[0].call_args == ((1, 2), {})
assert calls[1].call_args == ((3, 4), {})
在上面的示例中,我们使用了Mock对象和它的mock_calls属性来获取所有调用。然后,我们可以使用call_args_list和call_args属性来获取每个调用的参数,并进行断言来测试方法是否正确地调用。
这个解决方法可以确保我们测试每次调用时传入的参数,而不仅仅是最后一次调用的参数。