我有一些像这样的代码
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...
答案 0 :(得分:0)
my_mock(1, 2).return_value = value
您正在使用该行实际设置通过调用my_mock
返回的另一个模拟对象的return_value。如果您按预期执行m()()
而不是m(1, 2)
,则会返回您在此处分配的值。
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()
要求目标以包/模块名称开头。