如何在Python测试期间替换方法?

2024-04-26 05:09:04 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图在测试期间替换方法函数。原来的方法比较复杂,所以我想用一个简单的函数来代替它进行测试。在

我试过使用模拟库。但看起来它只修改在测试用例中直接创建的对象。如果测试用例中的其他函数调用该方法,则不会替换该方法。在


1.py类:

class Class1:
    def foo(self):
        #do a lot of calculation
        return 1

2.py类:

^{pr2}$

在测试.py公司名称:

import mock
from .class1 import Class1
from .class2 import Class2

class Class1:
    def foo(self):
        # no calculation
        return 2

@mock.patch.object(Class1, "foo")
def test_case(mock):
    my_class2 = Class2()
    assert my_class2.doo() == 2

我试图将类1中的foo()替换为在中创建的新foo()测试.py. 但是因为Class1对象是在Class2对象内部创建的,所以该方法不会以这种方式被替换


Tags: 对象方法函数pyimportselffoodef
1条回答
网友
1楼 · 发布于 2024-04-26 05:09:04

你必须嘲笑正确的事情。Class2.doo创建class2.Class1的实例,而不是test.Class1(在模拟时,名称是重要的,并且class2和{}都有自己的全局作用域)。在

import mock
import class2


@mock.patch.object(class2.Class1, 'foo', return_value=2)
def test_case(mock):
    my_class2 = class2.Class2()
    assert my_class2.doo() == 2

相关问题 更多 >