繁体   English   中英

如何为具有特定签名的函数调用设置return_value?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM