我有一个具有两个方法的类。这两种方法都使用从另一个模块导入的请求函数。如何仅在这些类方法之一中修补请求功能?
我一直在寻找这样的话题,但没有找到任何相关的话题。
模块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的使用。
答案 0 :(得分:3)
我认为不可能。修补通过替换整个模块中的符号而起作用-因此,当您替换some_func
中的A
时,将修补some_func
的所有实例。
您可以通过两次导入some_func
(使用两个不同的名称)来解决此问题
from foo import some_func
from foo import some_func as some_func_two
现在使用some_func
中的func_1
和some_func_two
中的func_2
。现在,您可以在测试期间修补some_func
,并且func_2
仍应使用其他方法。尽管我建议不要这样做-更改实际代码以测试气味,就像您应该重构代码一样。