无法模拟来自测试功能的功能调用中的功能调用

时间:2019-07-23 22:18:18

标签: python unit-testing mocking

我在测试方面遇到问题,希望能得到一些帮助。

我的一个同事将我指向unittest.mock和patch,它们似乎正是我所需要的,但是我无法使其正常工作。

已编写的问题:我有一个测试用例,它在python文件(fooFile)中调用并测试一个函数(foo),该文件在另一个python文件(barFile)中调用另一个函数(bar)。 bar功能是我需要从测试文件中模拟的功能。

示例代码:

barFile.py

#homedir.lib.barFile.py

def bar(object2):
    return False

fooFile.py

#homedir.api.fooFile.py
from homedir.lib.barFile import bar

def foo(object1):
    result = bar(object1['item1'])
    if result:
        return 200
    else:
        return 400

testFooFile.py-不模拟

#homedir.tests.testFooFile.py
from homedir.api.fooFile import foo

def testFoo():
    payload = {"item1": "nothing"}
    result = foo(payload)
    assert result == 200

基本上,从testFooFile.py文件中,我需要模拟bar函数并使它返回True。我只能通过foo呼叫bar,这就是我的问题所在。我可以很好地模拟bar函数,但是仅当我直接从testFile调用它时,而不是在foo函数调用时,就可以对它进行模拟。这与我目前所拥有的差不多。


testFooFile.py-当前想法

#homedir.tests.testFooFile.py
from unittest.mock import patch
from homedir.api.fooFile import foo

@patch('homedir.lib.barFile.bar')
def testFoo(mock_bar):
    mock_bar.return_value = True

    payload = {"item1": "nothing"}
    result = foo(payload)
    assert result == 200

1 个答案:

答案 0 :(得分:1)

我认为您要修补的路径应为homedir.api.fooFile.bar。您需要修补bar()正在使用的foo()的实例fooFile.py