具有副作用的 Python 补丁对象

标签 python unit-testing mocking

我试图让 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。向 is_email_correct 方法添加了缺少的 self 参数。


my_side_effect 可以简化如下:

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

关于具有副作用的 Python 补丁对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19107424/

相关文章:

python - LabelEncoder - 元组的拟合列表 - y 应该是一维数组

c# - 如何强制方法使用模拟?

angular - 如何使用 Injector 在函数中模拟注入(inject)的服务

python - Flask 应用程序未正确使用配置文件设置

c++ - CMake:当 *.proto 文件更改时有条件地生成 protobuf `*pb.{h|cpp}` 文件

python - 按 Pandas 系列中的第二列排序

c++ - CMake:带有单元测试的项目结构

java - JMockit:如何根据构造函数中给出的参数来模拟方法?

java - 尝试找到使用mockito调用匿名内部回调的最佳实践

c# - 模拟属性 - C#