【发布时间】:2022-01-07 23:23:15
【问题描述】:
我有一个类似于以下代码的情况,我试图修补使用 from 语句导入的函数:
from module1 import function1
def function2():
function1_result = function1()
return 2*function1_result
然后测试代码是:
from unittest import patch
def test_function2():
func1_value = 5
with patch("module1.function1", return_value=func1_value) as patched_func1:
function2_value = function2()
assert function2_value==2*func1_value
但是代码运行但它不使用修补函数 1 并实际调用该函数。但是,如果我将 import 语句更改为 import module1,那么测试运行良好。
【问题讨论】:
-
您应该修补
module2.function1,其中module2是function2 所在的位置以及您已将function1导入的位置,如在导入后从该模块访问测试代码function1的上下文中. -
我认为这不是问题,因为当我将导入更改为
import module1时,测试运行良好。 (我已经修改了问题) -
它会运行良好,因为在您更改之后,在测试代码中,要修补的函数是
module1.function1,请考虑function1在您的代码中的位置,以及补丁是什么替换呼叫。在失败的情况下,您将 function` 带入 module2 命名空间。所以修补需要替换对module2.function1的调用。在后一种情况下 module1 被导入并且 function1 仍然被称为 module1.function1 所以补丁工作正常 -
啊,是的,我和你在一起。谢谢!
标签: python unit-testing mocking python-unittest