我在测试方面遇到问题,希望能得到一些帮助。
我的一个同事将我指向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
答案 0 :(得分:1)
我认为您要修补的路径应为homedir.api.fooFile.bar
。您需要修补bar()
正在使用的foo()
的实例fooFile.py
。