如果函数是使用 from 语句导入的,则修补该函数
patching a function if that function is imported using the from statement
我有一个类似于以下代码的案例,我正在尝试修补使用 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 module1
那么测试运行正常。
看Where to patch文档,文档里的例子很清楚。
module1.py
:
def function1():
return 1
module2.py
:
from module1 import function1
def function2():
function1_result = function1()
return 2*function1_result
test_module2.py
:
from unittest import TestCase
from unittest.mock import patch
import unittest
from module2 import function2
class TestModule2(TestCase):
def test_function2(self):
func1_value = 5
with patch("module2.function1", return_value=func1_value) as patched_func1:
function2_value = function2()
assert function2_value == 2*func1_value
if __name__ == '__main__':
unittest.main()
测试结果:
.
----------------------------------------------------------------------
Ran 1 test in 0.000s
OK
我有一个类似于以下代码的案例,我正在尝试修补使用 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 module1
那么测试运行正常。
看Where to patch文档,文档里的例子很清楚。
module1.py
:
def function1():
return 1
module2.py
:
from module1 import function1
def function2():
function1_result = function1()
return 2*function1_result
test_module2.py
:
from unittest import TestCase
from unittest.mock import patch
import unittest
from module2 import function2
class TestModule2(TestCase):
def test_function2(self):
func1_value = 5
with patch("module2.function1", return_value=func1_value) as patched_func1:
function2_value = function2()
assert function2_value == 2*func1_value
if __name__ == '__main__':
unittest.main()
测试结果:
.
----------------------------------------------------------------------
Ran 1 test in 0.000s
OK