gpt4 book ai didi

unit-testing - 如何在单元测试中模拟 subprocess.call

转载 作者:行者123 更新时间:2023-12-04 01:02:34 26 4
gpt4 key购买 nike

我在 python 3.3 上,我必须测试一个使用 call 的方法来自 subprocess.py。

我试过了:

subprocess.call = MagicMock()

with patch('subprocess.call') as TU_call:

但在 Debug模式下,我发现 python 调用有效 subprocess.call

最佳答案

对我来说很好用(Ubuntu 13.04,Python 3.3.1):

$ python3.3
Python 3.3.1 (default, Sep 25 2013, 19:29:01)
[GCC 4.7.3] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import mock
>>> import subprocess
>>> result = subprocess.call('date')
Fri Jan 3 19:45:32 CET 2014
>>> subprocess.call = mock.create_autospec(subprocess.call, return_value='mocked!')
>>> result = subprocess.call('date')
>>> print(result)
mocked!
>>> subprocess.call.mock_calls
[call('date')]

我相信这个问题是关于 this particular 的用法 mock包裹

一般性陈述,与您的直接问题无关

在我明白这个问题是专门关于python模拟包的使用之前写的。

模拟函数的一种通用方法是显式重新定义函数或方法:
$ python3.3
Python 3.3.1 (default, Sep 25 2013, 19:29:01)
[GCC 4.7.3] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import subprocess
>>> subprocess.call('date')
Fri Jan 3 19:23:25 CET 2014
0
>>> def mocked_call(*a, **kw):
... return 'mocked'
...
>>> subprocess.call = mocked_call
>>> subprocess.call('date')
'mocked'

这种直接方法的一大优点是它没有任何包依赖项。缺点是如果有特定需求,所有的决策逻辑都必须手动编码。

作为模拟包的示例, FlexMock is available适用于 Python 2.7 和 Python 3.* 及其覆盖 subprocess.call 的用法在 this question 中讨论

关于unit-testing - 如何在单元测试中模拟 subprocess.call,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19179795/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com