bey*_*rem 12 unit-testing mocking python-3.x
我在python 3.3上,我必须测试一个使用callsubprocess.py 的方法.
我试过了:
subprocess.call = MagicMock()
with patch('subprocess.call') as TU_call:
Run Code Online (Sandbox Code Playgroud)
但在调试模式下,我发现python有效调用 subprocess.call
cfi*_*cfi 11
对我来说很好用(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')]
Run Code Online (Sandbox Code Playgroud)
我相信这个问题是关于这个特定 mock包的使用
一般性陈述,与您的直接问题无关
在我明白问题是关于使用python mock包之前写了这个.
模拟函数的一种通用方法是显式重新定义函数或方法:
$ 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'
Run Code Online (Sandbox Code Playgroud)
这种简单方法的一大优点是它没有任何包依赖性.缺点是如果有特定需求,所有决策逻辑必须手动编码.
作为模拟 包的示例,FlexMock 可用于Python 2.7和Python 3.*并且subprocess.call在此问题中讨论了其覆盖的使用
| 归档时间: |
|
| 查看次数: |
7934 次 |
| 最近记录: |