python - 在 python 中模拟类上的多个方法的干净方法是什么?

标签 python django unit-testing mocking

在编写测试时,我经常面临需要模拟多个类方法的情况。目前,我通过嵌套包含 mock 引用的 with 语句来实现此目的,例如

from ... import A


def test_sample(self)
    instance = A()
    with mock(A, 'function_1', return_value=1):
        with mock(A, 'function_2', return_value=2):
            with mock(A, 'function_3', return_value=3):
                assert A.function_4, 10

有没有更简洁/推荐的方法来做到这一点?如果能够删除多个嵌套调用,那就太好了!

在此过程中,类上可能有也可能没有其他未被模拟的方法。

最佳答案

您不需要嵌套上下文管理器 - 您可以一次性修补所有方法:

def test_sample(self)
    instance = A()
    with (mock(A, 'function_1', return_value=1),
          mock(A, 'function_2', return_value=2),
          mock(A, 'function_3', return_value=3)):

         assert A.function_4, 10

或者您可以使用patch.multiple :

from unittest import patch

def test_sample(self)
    instance = A()
    with patch.multiple(A, function_1=2, function_2=2, function_3=3) as patched_values:
        assert A.function_4, 10

关于python - 在 python 中模拟类上的多个方法的干净方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47861616/

相关文章:

python - 正则表达式以匹配 YAML 中的键

Django @csrf_exempt 在类 View 中不起作用

python - 转换 s3 视频文件分辨率并将其存储回 s3

unit-testing - 执行 Go 测试下划线 (_) 代替正确的路径

Python:名称解析;函数def的顺序

python - 为 Wagtail 问题提供引导轮播

python - 如何在 tensorflow session 中使用mean_squared_error损失

django - 如何将参数传递给 Django 中的表单?

c# - 如何使用 FluentAssertions 断言集合按 2 个属性排序?

javascript - Mocha 测试无法在 nodejs 服务器上运行