具有 side_effect 的 Python 补丁对象 [英] Python patch object with a side_effect

查看:62
本文介绍了具有 side_effect 的 Python 补丁对象的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我试图让 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 作为装饰器或上下文管理器,如下面的代码:

<预><代码>>>>类 EmailChecker():... def is_email_correct(self, email):... 经过...>>>def my_side_effect(*args):...如果 args[0] == '1':...返回真... 别的:...返回假...>>>使用 mock.patch.object(EmailChecker, 'is_email_correct', side_effect=my_side_effect):... checker = EmailChecker()...打印(checker.is_email_correct('1'))...打印(checker.is_email_correct('2'))...真的错误的

注意:将 **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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆