Python修补模块函数?

Python修补模块函数?,python,mocking,Python,Mocking,我试图在一个使用从另一个模块导入的函数的类中测试一个方法,我想修补这个导入的模块以简化我的测试,但我似乎无法找到它,我尝试了各种修补程序的路径,但运气不佳 作为一个简化的例子,我有一个如下的项目结构: 在Adders文件夹中,我有一个AddFour类和一个Util模块,看起来像这样,您给AddFour一个值,它通过giveFour方法将四个值相加 # Util.py def giveFour(): return 4 #AddFour.py from Adders.Util impor

我试图在一个使用从另一个模块导入的函数的类中测试一个方法,我想修补这个导入的模块以简化我的测试,但我似乎无法找到它,我尝试了各种修补程序的路径,但运气不佳

作为一个简化的例子,我有一个如下的项目结构:

在Adders文件夹中,我有一个
AddFour
类和一个
Util
模块,看起来像这样,您给
AddFour
一个值,它通过
giveFour
方法将四个值相加

# Util.py
def giveFour():
    return 4

#AddFour.py
from Adders.Util import giveFour

class AddFour:

def add(self, value):
    return value + giveFour()    
然后,我进行了一个测试,为了举例,我试图修补
giveFour
函数,以返回5

我做了一些阅读,常见的建议是在查找对象的地方打补丁,但我不能正确地找到它

import unittest
from unittest.mock import patch
from Adders.AddFour import AddFour

class AddFour_Tests(unittest.TestCase):

    @patch('Adders.AddFour.giveFour')
    def give_five(mock_give):
        mock_give.return_value = 5


    def test_add_four(self):
        test_class = AddFour() # Should now add 5?
        result = test_class.add(5)
        self.assertEqual(result, 10)
如果可能的话,有人能给我指出正确的方向吗?我觉得我遗漏了一些非常明显的东西

您的代码应该是:

class AddFour_Tests(unittest.TestCase):

    @patch('adders.AddFour.giveFour')
    def test_addfour(self, give_four):
        give_four.return_value = 5 
        add4 = AddFour()
        result = add4.add(5)
        self.assertEqual(result, 10) 
您希望在调用模拟函数的地方装饰测试方法,因为模拟仅在该方法中处于活动状态