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

Python中无需修改原函数如何测试内部调用函数的返回值

解决方案

你可以用Python标准库自带的unittest.mock.patch实现需求,全程无需修改原函数代码,也不会干扰原有函数的执行逻辑,适配E2E测试的要求。

实现步骤

  • 首先备份你要跟踪的原函数,自定义一个带返回值捕获逻辑的包装函数
  • 用patch替换原函数为你的包装函数,执行测试逻辑
  • 从捕获容器中提取目标返回值

完整代码示例

from unittest.mock import patch
# 导入你要测试的原函数,以及要跟踪的被调用函数
from your_module import first_func, second_func

def test_capture_second_func_return():
    # 用可变容器存储捕获到的返回值,支持捕获多次调用的结果
    captured_returns = []
    # 备份原函数逻辑
    original_second = second_func

    # 定义包装函数,保留原执行逻辑,同时记录返回值
    def track_second_call(*args, **kwargs):
        result = original_second(*args, **kwargs)
        captured_returns.append(result)
        return result

    # 注意patch路径规则:在哪里调用就patch哪里,此处如果first_func在your_module中调用second_func,就patch "your_module.second_func"
    with patch("your_module.second_func", side_effect=track_second_call):
        # 执行你的测试逻辑,调用first_func
        first_func(x=1, y=2, z=3) # 替换为实际测试入参

    # 此处captured_returns里的第一个元素就是你要的d的值
    target_d = captured_returns[0]
    # 你可以在这里加断言,比如 assert target_d == 预期值
    print(f"捕获到的second_func返回值:{target_d}")

注意事项

  • patch路径必须正确:如果first_func所在的模块是通过from xxx import second_func的方式引入的函数,你需要patch的是first_func所在模块的second_func,而不是原定义模块的second_func。
  • 如果目标函数会被调用多次,captured_returns会按调用顺序存储所有返回值,按需提取对应位置的值即可。

适配Telethon测试场景

你只需要把上述示例中的second_func替换为你要跟踪的Telethon发送消息相关的目标函数,按规则配置patch路径,即可捕获到对应函数的实际返回值,完全不影响Bot的正常发送流程。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 14:45:08