Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/extjs/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 确定unittest.mock.patch的目标_Python_Unit Testing_Mocking - Fatal编程技术网

Python 确定unittest.mock.patch的目标

Python 确定unittest.mock.patch的目标,python,unit-testing,mocking,Python,Unit Testing,Mocking,我正在为我一直在开发的库编写一些测试。它具有以下结构 lib |---__init__.py |---mod1.py |---mod2.py |---mod3.py tests |---__init__.py |---test_mod1.py 在tests文件夹的init.py中,我将库的路径添加到sys.path变量中,并由它们进行所有导入。i、 e.从lib导入mod1、mod2、mod3。在test_mod1.py中,我从。导入mod1 现在的问题是我想在mod1.py中修补一个函数。我

我正在为我一直在开发的库编写一些测试。它具有以下结构

lib
|---__init__.py
|---mod1.py
|---mod2.py
|---mod3.py
tests
|---__init__.py
|---test_mod1.py
在tests文件夹的init.py中,我将库的路径添加到
sys.path
变量中,并由它们进行所有导入。i、 e.
从lib导入mod1、mod2、mod3
。在test_mod1.py中,我从。导入mod1

现在的问题是我想在mod1.py中修补一个函数。我尝试了
mock.patch('mod1.func1')
但没有成功,然后我尝试了
mock.patch('.mod1.func1')
但也没有成功。
如何确定修补程序的目标?

您应该指定要模拟的函数的位置

在这种情况下,如果
func1
lib.mod1
中如下所示:

def func1(a, b):
    return a + b
那么,以下几点应该起作用:

@mock.patch('lib.mod1.func1', mock.Mock(return_value=3))
def test_mod1():
    result = mod1.func1(100, 200)
    assert result == 3  # not 300 because we mocked it
您还可以按如下方式实现它:

@mock.patch('lib.mod1.func1')
def test_mod1(mocked_func1):
    mocked_func1.return_value = 3
    result = mod1.func1(100, 200)
    assert result == 3  # not 300 because we mocked it