我有一个方法 - run_script()
- 我想测试一下。具体来说,我想测试对 subprocess.Popen
的调用。测试使用特定参数调用 subprocess.Popen
会更好。然而,当我运行测试时,我得到 TypeError: 'tuple' object is not callable
。
我如何测试我的方法以确保 subprocess
实际上是使用模拟调用的?
@mock.patch("subprocess.Popen")
def run_script(file_path):
process = subprocess.Popen(["myscript", -M, file_path], stdout=subprocess.PIPE)
output, err = process.communicate()
return process.returncode
def test_run_script(self, mock_subproc_popen):
mock_subproc_popen.return_value = mock.Mock(
communicate=("ouput", "error"), returncode=0
)
am.account_manager("path")
self.assertTrue(mock_subproc_popen.called)
原文由 steve 发布,翻译遵循 CC BY-SA 4.0 许可协议
在我看来,你在
run_script
函数上使用补丁装饰器似乎很不寻常,因为你没有在那里传递模拟参数。这个怎么样:
现在,您模拟的 subprocess.Popen 似乎返回一个元组,导致 process.communicate() 引发
TypeError: 'tuple' object is not callable.
。因此,最重要的是让 mock_subproc_popen 的 return_value 恰到好处。