我有一个方法,它使用不同的参数调用另一个方法两次。
class A(object):
def helper(self, arg_one, arg_two):
"""Return something which depends on arguments."""
def caller(self):
value_1 = self.helper(foo, bar) # First call.
value_2 = self.helper(foo_bar, bar_foo) # Second call!
使用assert_called_with
帮助我断言第一个电话,而不是第二个电话。即使assert_called_once_with
似乎没有帮助。我在这里错过了什么?有没有办法测试这样的电话?
答案 0 :(得分:11)
您可以使用mock_calls
,其中包含对方法的所有调用。此列表包含第一个呼叫,第二个呼叫以及所有后续呼叫。因此,您可以使用mock_calls[1]
编写断言来陈述关于第二次调用的内容。
例如,如果m = mock.Mock()
和代码m.method(123)
,那么你写:
assert m.method.mock_calls == [mock.call(123)]
断言调用m.method
的列表恰好是一个调用,即带参数123的调用。
答案 1 :(得分:1)
要添加到Simon Visser的答案,您可以使用unittest.TestCase
self.assertEqual()
方法而不是assert
语法,我说这是一种更好的做法在单元测试上下文中,因为您还可以添加注释,只要出现问题就会显示。
例如:
self.assertEqual(
[
mock.call(1, 'ValueA', True)),
mock.call(2, 'ValueB', False)),
mock.call(3, 'ValueC', False))
],
mock_cur.execute.mock_calls,
"The method was not called with the correct arguments."
)