Python: 使用给定的参数列表调用方法
Python: Call a method with a given list of arguments
我正在使用 PyUnit 对我的软件进行单元测试,不幸的是模拟对象提供的断言(例如 mock.assert_called_with)似乎没有提供断言失败时设置消息的方法。这就是为什么我想使用这样的包装器:
def wrap_mock_msg(mock_method, *args, msg):
try:
mock_method(<args here!>)
except AssertionError as e:
raise AssertionError(e.args, msg)
它将给定模拟对象的断言方法作为mock_method,失败时显示的消息为msg,以及一系列要作为 args 传递给 mock_method 的参数。
我需要它是一个变量 args 列表,因为 mock.assert_called_with(arg1, arg2, .., arg_n)也可以接受任意数量的参数,这取决于我试图模拟的方法。
不幸的是,我不能只将参数列表传递给 mock_method,因为它当然会被视为单个参数。现在,这让我面临必须将参数列表传递给 mock_method 的挑战,就好像我硬输入了它一样。例如:
args = ['an', 'example']
..应该导致以下调用:
mock_method('an', 'example')
有什么办法可以实现吗?
您可以拨打:
mock_method(*args)
使用 *
运算符可以两种方式解包。包装器中的参数被解压缩到一个列表中,然后该列表被解压缩到函数中。
您可以使用 *
运算符解压列表中的项目。您需要以这种方式将参数作为元组传递。代码如下所示:
def wrap_mock_msg(mock_method, args, msg):
try:
mock_method(*args)
except AssertionError as e:
raise AssertionError(e.args, msg)
我正在使用 PyUnit 对我的软件进行单元测试,不幸的是模拟对象提供的断言(例如 mock.assert_called_with)似乎没有提供断言失败时设置消息的方法。这就是为什么我想使用这样的包装器:
def wrap_mock_msg(mock_method, *args, msg):
try:
mock_method(<args here!>)
except AssertionError as e:
raise AssertionError(e.args, msg)
它将给定模拟对象的断言方法作为mock_method,失败时显示的消息为msg,以及一系列要作为 args 传递给 mock_method 的参数。 我需要它是一个变量 args 列表,因为 mock.assert_called_with(arg1, arg2, .., arg_n)也可以接受任意数量的参数,这取决于我试图模拟的方法。
不幸的是,我不能只将参数列表传递给 mock_method,因为它当然会被视为单个参数。现在,这让我面临必须将参数列表传递给 mock_method 的挑战,就好像我硬输入了它一样。例如:
args = ['an', 'example']
..应该导致以下调用:
mock_method('an', 'example')
有什么办法可以实现吗?
您可以拨打:
mock_method(*args)
使用 *
运算符可以两种方式解包。包装器中的参数被解压缩到一个列表中,然后该列表被解压缩到函数中。
您可以使用 *
运算符解压列表中的项目。您需要以这种方式将参数作为元组传递。代码如下所示:
def wrap_mock_msg(mock_method, args, msg):
try:
mock_method(*args)
except AssertionError as e:
raise AssertionError(e.args, msg)