有没有一种方法可以模拟在另一个函数调用中调用的函数返回?例如:
def bar():
return "baz"
def foo():
return bar()
class Tests(unittest.TestCase):
def test_code(self):
# hijack bar() here to return "bat" instead
assert(foo() == "bat")
我试过使用,@mock.patch
但发现它只允许我模拟正在调用的函数,而不是由于调用其他函数而被调用的函数。
通用补丁
unittest.mock.patch
确实做到了我的其他答案开箱即用的建议。您可以根据@patch
需要添加任意数量的注释,所选对象将被修补:
from unittest.mock import patch
def bar():
return "baz"
def foo():
return bar()
class Tests(unittest.TestCase):
@patch(__name__ + '.bar', lambda: 'bat')
def test_code(self):
assert(foo() == "bat")
在此配置中,功能bar
将在test_code
完成后恢复。如果您希望同一补丁适用于您班级中的所有测试用例,请对整个班级进行注释:
@patch(__name__ + '.bar', lambda: 'bat')
class Tests(unittest.TestCase):
def test_code(self):
assert(foo() == "bat")
全球补丁
您也可以unittest.mock.patch.dict
在全局名称空间上获得相同的结果:
class Tests(unittest.TestCase):
@patch.dict(globals(), {'bar': lambda: 'bat'})
def test_code(self):
assert(foo() == "bat")
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句