[英]How to setup return_value for a function call with specific signature?
我有一些这样的代码
class MyClass:
def my_function(self):
....
return lst
我想测试其他一些调用my_function
函数。 我不知道如何为具有特定签名的函数调用设置return_value
。 有什么办法吗? 不过,使用.Net中的Moq可以非常轻松地完成此操作...
这是我尝试过的方法,但是不起作用。
with patch("MyClass.my_function") as my_mock:
my_mock(1, 2).return_value = [
{
"id" : "A"
}
]
#call the function...
#assert...
my_mock(1, 2).return_value = value
您在该行中所做的实际上是为通过调用my_mock
返回的另一个模拟对象设置return_value。 如果执行m()()
而不是您可能期望的m(1, 2)
m()()
,则会返回您在其中分配的值。
return_value
不依赖于呼叫签名,应该这样使用:
>>> my_mock.return_value = 'foobar'
>>> my_mock()
'foobar'
>>> my_mock(1, 2)
'foobar'
如果希望返回值取决于调用参数,则应使用side_effect
:
>>> def mock_func(*args):
... if args == (1, 2):
... return 'foo'
... else:
... return 'bar'
...
>>> my_mock.side_effect = mock_func
>>> my_mock(1, 2)
'foo'
>>> my_mock()
'bar'
顺便说一句,我更喜欢用patch.object修补方法。 我不认为patch("MyClass.my_function")
会起作用,因为patch()
要求目标以包/模块名称开头。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.