Mur*_*a Z 3 python unit-testing mocking python-mock
我如何使用 python 模拟 python 方法unittest.mock,它将返回作为参数传递的相同值,
我试过,
from unittest.mock import MagicMock
def dummy_function(value):
"Will return same value as value passed to the function"
return value
# To moke gettext function used in template
# Then I pass this mock method to Jinja2 template to moke gettext string
_ = MagicMock(return_value=dummy_function)
Run Code Online (Sandbox Code Playgroud)
当我打印 jinja 模板时,它会显示如下所示的测试,
<div class="order_details">\n
<legend class="badge"><function dummy_function at 0x10887f730></legend>\n
</div>\n
Run Code Online (Sandbox Code Playgroud)
原始 Jinja2 模板有
<div class="order_details">
<legend class="badge">_('Details')</legend>
</div>
Run Code Online (Sandbox Code Playgroud)
return_value只是一个要返回的固定对象,而您只是告诉模拟调用的结果是一个函数对象。
您想改用该side_effect属性:
_ = MagicMock(side_effect=dummy_function)
Run Code Online (Sandbox Code Playgroud)
设置side_effect为函数会导致使用与模拟相同的参数调用它。请参阅文档:
如果你传入一个函数,它将使用与模拟相同的参数被调用,除非函数返回
DEFAULT单例,否则对模拟的调用将返回函数返回的任何内容。
演示:
>>> from unittest.mock import MagicMock
>>> identity = lambda a: a
>>> MagicMock(return_value=identity)('called') # returns the function object, it won't call it
<function <lambda> at 0x10fa61620>
>>> MagicMock(side_effect=identity)('called') # will call the function
'called'
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4317 次 |
| 最近记录: |