Python 单元测试:如何断言同一方法的多个调用?
我有一个方法,它使用不同的参数调用另一个方法两次Python 单元测试:如何断言同一方法的多个调用?,python,unit-testing,python-unittest,Python,Unit Testing,Python Unittest,我有一个方法,它使用不同的参数调用另一个方法两次 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(f
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\u called\u with
可以帮助我只断言第一个调用,而不是第二个调用。甚至用调用一次的assert\u似乎也没有什么帮助。我错过了什么?有什么方法可以测试这些调用吗?您可以使用包含对方法进行的所有调用的。此列表包含第一个调用、第二个调用以及所有后续调用。因此,您可以使用mock_调用[1]
编写断言,以说明第二次调用的情况
例如,如果m=mock.mock()
assert m.method.mock_calls == [mock.call(123)]
它断言对m.method
的调用列表恰好是一个调用,即带有参数123的调用。要添加到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."
)
他们文档中的示例没有多大意义。你能举个更好的例子吗?@BrandonIbbotson我在上面的回答中加了一个例子。