具有 side_effect 的 Python 补丁对象 [英] Python patch object with a side_effect
问题描述
我试图让 Mock 对象根据给定的输入返回某些值.我在 SO 上查找了一些示例,但出于某种原因,我仍然无法使其正常工作.这就是我现在所拥有的.
class EmailChecker():def is_email_correct(email):一些正则表达式来确定电子邮件是否有效,返回 True 或 Falsedef my_side_effect(**args):如果 args[0] == '1':返回真别的:返回错误myMock = mock.patch.object(EmailChecker, 'is_email_correct', side_effect=my_side_effect)
但它似乎不起作用.我在这里错过了什么?
使用 patch.object
作为装饰器或上下文管理器,如下面的代码:
注意:将 **args
替换为 *args
.向 is_email_correct
方法添加了缺失的 self
参数.
my_side_effect
可以简化如下:
def my_side_effect(email):返回电子邮件 == '1'
I'm trying to have a Mock object return certain values based on the input given. I looked up a few examples on SO and for some reason I still can't get it to work. Here's what I have right now.
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)
Yet it doesn't seem to work. What am I missing here?
Use patch.object
as a decorator or context manager, as in the following code:
>>> 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
NOTE: Replaced **args
with *args
. Added missing self
argument to is_email_correct
method.
my_side_effect
could be simplified as follows:
def my_side_effect(email):
return email == '1'
这篇关于具有 side_effect 的 Python 补丁对象的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!