You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何Mock被测函数内部调用的函数?Mock失效问题求助

解决Python Mock未生效的问题

你的问题核心是Mock路径错误,导致实际函数仍在执行。

问题原因

在process_moduleA.py中,你通过from pytests.utils.archive import archive_process将目标函数导入到了当前模块的命名空间下。此时你需要Mock的是process_moduleA模块内的archive_process引用,而非原utils.archive模块中的定义。之前的写法Mock了原模块的函数,但不会影响process_moduleA已经导入的本地引用,所以实际执行的还是原函数。

修正后的测试代码

方式一:使用unittest.mock.patch装饰器

from pytests.moduleA.functions.process_moduleA import arch
from unittest.mock import patch

@patch('pytests.moduleA.functions.process_moduleA.archive_process')
def test_arch(mock_archive_proc):
    arch()
    # 建议同时验证调用参数,确保逻辑正确
    mock_archive_proc.assert_called_once_with(param1, param2)

方式二:使用pytest-mock的mocker对象

from pytests.moduleA.functions.process_moduleA import arch

def test_arch(mocker):
    mock_archive = mocker.patch('pytests.moduleA.functions.process_moduleA.archive_process')
    arch()
    mock_archive.assert_called_once()

关键原则

Mock的目标必须是被测试代码实际使用的对象路径,而非原函数的定义路径。当模块通过from ... import ...导入函数时,该函数会成为当前模块的本地变量,此时需要Mock这个本地变量才能生效。

内容的提问来源于stack exchange,提问作者Mystique

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 01:27:17