Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 返回与参数传递的值相同的模拟方法_Python_Unit Testing_Mocking_Python Mock - Fatal编程技术网

Python 返回与参数传递的值相同的模拟方法

Python 返回与参数传递的值相同的模拟方法,python,unit-testing,mocking,python-mock,Python,Unit Testing,Mocking,Python Mock,如何使用pythonunittest.mock来模拟python方法,它将返回作为参数传递的相同值 我试过了 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

如何使用python
unittest.mock来模拟python方法,它将返回作为参数传递的相同值

我试过了

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)
当我打印jinja模板时,它会显示测试,如下所示

<div class="order_details">\n                
<legend class="badge">&lt;function dummy_function at 0x10887f730&gt;</legend>\n            
</div>\n 
\n
0x10887f730处的函数伪_函数\n
\n
原始Jinja2模板已被删除

<div class="order_details">             
<legend class="badge">_('Details')</legend>           
</div>

_(“细节”)

return\u value
永远只是一个要返回的固定对象,您刚刚告诉mock调用的结果是一个函数对象

您想改用以下选项:

设置函数的
副作用
会导致使用与mock相同的参数调用该函数。见:

如果传入一个函数,它将使用与mock相同的参数进行调用,除非该函数返回
DEFAULT
singleton,否则对mock的调用将返回函数返回的任何内容

演示:

来自unittest.mock导入MagicMock的
>>
>>>标识=λa:a
>>>MagicMock(return_value=identity)('called')#返回函数对象,它不会调用它
>>>MagicMock(side_effect=identity)('called')#将调用该函数
“呼叫”

您直接将函数对象作为返回值传递,这就是它打印函数的
repr
(名称和内存地址)的原因。您需要将实际值作为返回值传递,因此:

_ = MagicMock(return_value=dummy_function(somevalue))
但是,如果函数总是返回传递的值,那么它是无用的,创建一个mock已经足够了,所以可以这样做:

_ = MagicMock(return_value=somevalue)
然后像你想的那样叫你的mock

旁注:
用法代替名称的目的是什么?你在嘲笑gettext吗?如果不给mock起一个名字,或者给它起一个名字会更干净,那么最好的IMO就是给mock起一个名字,就像你正在模仿的真实函数一样,以使它更清晰

_ = MagicMock(return_value=dummy_function(somevalue))
_ = MagicMock(return_value=somevalue)