Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/277.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 单元测试:如何断言同一方法的多个调用?_Python_Unit Testing_Python Unittest - Fatal编程技术网

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我在上面的回答中加了一个例子。