我有一个有两种方法的类。这两种方法都使用从另一个模块导入的请求函数。如何仅在其中一个类方法中修补请求函数?
我找过这样的话题,但没有找到任何相关的东西。
模块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的使用。
我不认为这是可能的。修补工作通过替换整个模块中的符号来实现 - 所以当您在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
应该仍然使用其他方法。虽然我会反对它 - 改变测试气味的实际代码,你应该重构你的代码。