我一直在使用 Python 的unittest.mock
库,但现在我正在努力解决一个可能无法正确处理的用例。
考虑一个mymodule/code.py
包含以下代码段的文件:
def sum():
pass
def mul():
pass
def div():
pass
def get_functions():
return [sum, mul, div]
def foo():
functions = get_functions()
for func in functions:
func()
我想测试foo
功能,修补sum
功能,然后保持mul
原样div
。这是我最初尝试的:
class TestFoo(unittest.TestCase):
@mock.patch('mymodule.code.foo.sum')
def test_foo(foo_sum_mock):
foo()
foo_sum_mock.assert_called_once()
但是,上面说明的修补方法不起作用。我相信该sum
函数在加载时已正确修补mymodule.code.py
,但由于def sum()
块而重新定义。
通过阅读官方文档,我也尝试使用该库的start
和stop
函数unittest.mock
如下:
def test_foo():
patcher = mock.patch('module.code.sum')
mocked_sum_fun = patcher.start()
foo()
mocked_sum_fun.assert_called_once()
mock_sum_fun.stop()
这种方法也没有奏效。我希望它会在文件加载sum
后避免函数覆盖。modules/code.py
是否可以修补本地功能,例如sum
?或者将sum
函数移动到另一个文件是修补的唯一选项?
提前谢谢了!