【问题标题】:How to unit test a function that uses Popen?如何对使用 Popen 的函数进行单元测试?
【发布时间】:2014-06-25 12:47:53
【问题描述】:

我正在编写一个包含大量文件操作的程序。有些操作是通过调用subprocess.Popen来完成的,例如split -l 50000 ${filename}gzip -d -f ${filename} ${filename}.

现在我想对程序的功能进行单元测试。但是我如何对这些函数进行单元测试呢?

有什么建议吗?

【问题讨论】:

  • 使用mock库,见this example
  • @shihpeng 你想摆脱操作系统工具依赖(运行给定的测试,例如在 Windows 上)或者你想找到有效的方法来包装对某物的调用,什么将使用命令操作系统,但允许您评估,如果一切顺利?

标签: python unit-testing subprocess


【解决方案1】:

规范的方法是模拟对 Popen 的调用并将结果替换为一些测试数据。看看mock library documentation1

你会这样做:

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请注意,这在 python3.3 中以 unittest.mock 的形式包含在标准库中。

【讨论】:

    猜你喜欢
    • 2017-07-01
    • 2021-08-21
    • 2021-01-29
    • 1970-01-01
    • 2014-02-08
    • 1970-01-01
    • 1970-01-01
    • 2019-05-16
    • 2019-04-15
    相关资源
    最近更新 更多