如何对使用Popen的函数进行单元测试?
我正在写一个程序,这个程序涉及很多文件操作。有些操作是通过调用 subprocess.Popen
来完成的,比如 split -l 50000 ${filename}
和 gzip -d -f ${filename} ${filename}.
。
现在我想对这个程序的功能进行单元测试。但是我该如何对这些功能进行单元测试呢?
有什么建议吗?
1 个回答
10
标准的做法是模拟调用 Popen,并用一些测试数据来替换结果。可以看看这个 mock 库的文档。
你可以这样做:
with mock.patch.object(subprocess, 'Popen') as mocked_popen:
mocked_popen.return_value.communicate.return_value = some_fake_result
function_which_uses_popen_communicate()
现在你可以进行一些检查,或者做你想测试的事情...
1注意,这个功能在 Python 3.3 中被包含到了标准库里,叫做 unittest.mock
。