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

标签 python python-3.x unit-testing testing python-mock

我正在尝试在测试期间替换方法函数。原来的方法比较复杂,测试时想用一个简单的函数代替。

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


class1.py:

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

class2.py:

from .class1 import Class1

class Class2:
    def doo(self):
        my_class1 = Class1()
        return my_class1.foo()

测试.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

我正在尝试的是将 Class1 中的 foo() 替换为在 test.py 中创建的新 foo()。但是因为Class1对象是在Class2对象内部创建的,所以这种方法并没有被替换。`

最佳答案

你必须 mock 正确的事情。 Class2.doo 创建了 class2.Class1 的实例,而不是 test.Class1(模拟时名称很重要,class2 test 都有自己的全局范围。

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

关于python - 如何在 Python 测试期间替换方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56121518/

相关文章:

python - 在 Julia 中使用 PyPlot 为动画实现迭代器

python - 如何在 python 中使用 yield 函数

python - 使用 pandas 将新数据帧索引到新列中

Python 3如何将以字节表示的大量数字转换为整数?

java - eclipse 第谷 : Testing plug-in's without using single test-bundles

python - 使用 loadtxt (numpy) 读取丢失数据的文件

java - 如何在python中使用递归从java代码中解析方法体?

python - 使用 Postgresql 数据库创建 Azure Web 应用程序(这可能吗?)

android - Robolectric - BuildActivity(MyActivity.class).create() 抛出 NullPointerException

php - 使用 PHPUnit 模拟 PDO 对象