如何对使用Popen的函数进行单元测试?

10 投票
1 回答
3567 浏览
提问于 2025-04-18 10:58

我正在写一个程序,这个程序涉及很多文件操作。有些操作是通过调用 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

撰写回答