具有side_effect的 Python 补丁对象



我试图让一个 Mock 对象根据给定的输入返回某些值。我在SO上查找了一些示例,由于某种原因,我仍然无法使其工作。这是我现在所拥有的。

class EmailChecker():
    def is_email_correct(email):
        some regex to determine if email is valid, returns either True or False
def my_side_effect(**args):
    if args[0] == '1':
        return True
    else:
        return False
myMock = mock.patch.object(EmailChecker, 'is_email_correct', side_effect=my_side_effect)

然而,它似乎不起作用。我在这里错过了什么?

使用 patch.object 作为装饰器或上下文管理器,如以下代码所示:

>>> class EmailChecker():
...     def is_email_correct(self, email):
...         pass
... 
>>> def my_side_effect(*args):
...     if args[0] == '1':
...         return True
...     else:
...         return False
... 
>>> with mock.patch.object(EmailChecker, 'is_email_correct', side_effect=my_side_effect):
...     checker = EmailChecker()
...     print(checker.is_email_correct('1'))
...     print(checker.is_email_correct('2'))
... 
True
False

:已将**args替换为*args。向方法添加了缺少self参数is_email_correct


my_side_effect可以简化如下:

def my_side_effect(email): 
    return email == '1'

最新更新