确定unittest.mock.patch的目标

时间:2017-07-29 03:38:32

标签: python unit-testing mocking

我正在为我正在开发的图书馆写一些测试。它具有以下结构。

lib
|---__init__.py
|---mod1.py
|---mod2.py
|---mod3.py
tests
|---__init__.py
|---test_mod1.py

init .py of tests文件夹中,我将库的路径添加到sys.path变量,然后进行了所有导入。即from lib import mod1, mod2, mod3。在 test_mod1.py 中,我做了from . import mod1

现在的问题是我想在 mod1.py 中修补一个函数。我尝试了mock.patch('mod1.func1'),但那不起作用,然后我尝试了mock.patch('.mod1.func1')这也没有用。 如何确定补丁的目标?

1 个答案:

答案 0 :(得分:1)

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

在这种情况下,如果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