我正在使用PyUnit对软件进行单元测试,但不幸的是,模拟对象(例如 mock.assert_call_with )提供的断言似乎没有提供一种设置消息的方式,以防万一断言失败。这就是为什么我要使用这样的包装器:
cmake -DCMAKE_BUILD_TYPE=Debug path/to/sources
cmake --build . --target all
cmake --build . --target test
它将给定模拟对象的断言方法为 mock_method ,失败时显示的消息为 msg ,并将一系列参数传递给 mock_method 作为 args 。 我需要将其作为变量 args 列表,因为 mock.assert_drawn_with(arg1,arg2,..,arg_n)也可以采用任意数量的参数,具体取决于方法我想嘲笑。
不幸的是,我不能仅仅将参数列表传递给 mock_method ,因为它当然会被当作一个参数。现在,这给我带来了一个挑战,那就是必须将参数列表传递给 mock_method ,就像我已经对其进行了硬键入一样。例如:
Start 110: UnitTest
110/119 Test #110: UnitTest.................***Exception: Child aborted 0.01 sec
dyld: Library not loaded: library.dylib
Referenced from: /tmp/build/bin/UnitTest
Reason: image not found
..应导致以下调用:
def wrap_mock_msg(mock_method, *args, msg):
try:
mock_method(<args here!>)
except AssertionError as e:
raise AssertionError(e.args, msg)
有什么办法可以做到这一点?
答案 0 :(得分:3)
您可以使用*
运算符打开列表中的项目包装。您将需要以这种方式将参数作为元组传递。代码如下:
def wrap_mock_msg(mock_method, args, msg):
try:
mock_method(*args)
except AssertionError as e:
raise AssertionError(e.args, msg)
答案 1 :(得分:0)
您可以致电:
mock_method(*args)
使用*
运算符以任何一种方式打开包装。包装器中采用的参数将解压缩到一个列表中,然后将该列表解压缩到该函数中。