我是Python中的模拟新手
我想模拟一个来自 subprocess.check_call 的异常 CalledProcessError,当异常发生时我想检查 ret 值是否为 1。
当我模拟如下函数调用时,我得到错误
def myFunc(cmd):
try:
ret = subprocess.check_call(cmd)
except subprocess.CalledProcessError as e:
ret = 1
return ret
def test_some_func():
with mock.patch('subprocess.check_call', side_effect=subprocess.CalledProcessError("Exception")):
ret = myFunc(["some_command"])
assert ret == 1
我得到了错误
with mock.patch('subprocess.check_call', side_effect=subprocess.CalledProcessError("Exception")):
E TypeError: __init__() missing 1 required positional argument: 'cmd'
任何人都可以给我提示缺少什么吗? 有关于 python 模拟的好的教程/书籍吗?
将参数添加到 CalledProcessError 后丢失。
def test_some_func():
with mock.patch('subprocess.check_call',
side_effect=subprocess.CalledProcessError('127',
'some_command'):
ret = myFunc(["some_command"])
assert ret == 1
我最近也有同样的需求。我发现模拟 subprocess.call() 更容易,它是由 subprocess.check_call 在内部调用的。
call() 甚至可以为您和所有内容处理获取 cmd 参数!
@patch.object(subprocess, "call", return_value=1)
def test_some_func
your-code-that-runs-check_call-here