为何mock.assert_called_once()断言不通过?明明调用了f2函数
问题分析与解决方案
核心错误点
- 断言方式错误:通过
mocker.patch("functions.f2")获取的mock对象本身就是被替换后的f2函数,不需要通过mock.f2调用断言方法,直接使用mock对象即可检测调用情况。 - 多余的函数调用:测试用例中额外调用了
f2(1),这不仅会让mock的调用次数超出预期,而且完全多余——f1(1)已经会触发f2(4)的调用。
修正后的测试代码
def test_f1(mocker): mock = mocker.patch("functions.f2") assert f1(1) == 1 # 精准断言:验证f2是否被调用一次,且参数为4 mock.assert_called_once_with(4)
额外注意事项
确保patch的路径正确:如果f1和f2定义在functions.py模块中,且测试文件与该模块在同一目录,"functions.f2"的路径是正确的;如果函数和测试代码在同一个文件中,路径需改为"__main__.f2"(或当前模块名称)。
内容的提问来源于stack exchange,提问作者ms360
相关产品推荐
相关产品推荐

