如果函数是使用 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