如何仅在选择的类方法中修补导入的函数?

问题描述 投票:0回答:1

我有一个有两种方法的类。这两种方法都使用从另一个模块导入的请求函数。如何仅在其中一个类方法中修补请求函数?

我找过这样的话题,但没有找到任何相关的东西。

模块foo.py

from module import some_func

class A():
    def func_1():
        return some_func(x)
    def func_2():
        return some_func(y)

到目前为止我尝试过的方法:模块test.py

from foo import A

with patch('foo.some_func'):
    A().func_1()
    A().func_2()    

这样可以在func_1和func_2中使用some_func,是吗?

from foo import A

with patch('foo.A.func_1.some_func'):
    A().func_1()
    A().func_2()    

而且这个引发了一个错误,即func_1没有some_func的属性(这是可以理解的)。

我想在func_1中修补some_func的使用。

python unit-testing mocking python-unittest
1个回答
3
投票

我不认为这是可能的。修补工作通过替换整个模块中的符号来实现 - 所以当您在some_func中替换A时,所有some_func实例都会被修补。

你可以通过导入some_func两次来解决它 - 有两个不同的名字

from foo import some_func
from foo import some_func as some_func_two

现在在some_funcfunc_1some_func_two中使用func_2。现在你可以在测试期间修补some_func并且func_2应该仍然使用其他方法。虽然我会反对它 - 改变测试气味的实际代码,你应该重构你的代码。

© www.soinside.com 2019 - 2024. All rights reserved.