在python中对类的多个方法进行模拟的简洁方法是什么?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在python中对类的多个方法进行模拟的简洁方法是什么?相关的知识,希望对你有一定的参考价值。

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

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中对类的多个方法进行模拟的简洁方法是什么?的主要内容,如果未能解决你的问题,请参考以下文章

对类(class)中的已有属性进行修改方法1

如何在 RandomForest 实现中对类进行加权?

对类的理解:

java vm 之 虚拟机启动对类的操作

如何在 Typescript 中对私有方法进行单元测试

如何在Typescript中对私有方法进行单元测试