我有一个方法(run_script
)想要测试。具体来说,我想测试对subprocess.Popen
的调用是否发生。最好测试使用某些参数调用subprocess.Popen
。当我运行测试时,我得到TypeError: 'tuple' object is not callable
。
如何测试我的方法以确保实际使用mock调用子流程?
@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)
在我看来,在
run_script
函数上使用patch decorator是不寻常的,因为您没有在那里传递模拟参数。这个怎么样:
现在,模拟的subprocess.Popen似乎返回一个元组,使process.communicate()引发
TypeError: 'tuple' object is not callable.
。因此,在mock_subpc_popen上获得正确的返回值是最重要的。存在可以使用的testfixtures包。
下面是一个使用模拟Popen的示例:
相关问题 更多 >
编程相关推荐