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

如何从Mock的to_csv方法中获取DataFrame实例用于测试?

如何拦截并获取函数内未返回的DataFrame实例

你可以通过Mock的side_effect功能捕获调用to_csv的DataFrame实例,具体实现如下:

  1. 在测试函数中定义一个捕获逻辑,接收self(即调用to_csv的DataFrame实例)和其他参数,将self保存到外部变量中。
  2. 将该捕获逻辑赋值给Mock对象的side_effect属性,当to_csv被调用时会自动执行捕获逻辑,从而拿到目标DataFrame。

修改后的测试代码如下:

import unittest
from unittest.mock import patch
import pandas as pd
from foo import bar

class TestBar(unittest.TestCase):
    @patch("pandas.DataFrame.to_csv")
    def test_bar(self, mock_to_csv):        
        captured_df = None
        
        def capture_to_csv(self, *args, **kwargs):
            nonlocal captured_df
            captured_df = self
        
        mock_to_csv.side_effect = capture_to_csv
        
        bar()
        
        # 验证捕获到的DataFrame是否符合预期
        expected_df = pd.DataFrame({'a': [1, 2, 3], 'b': [4, 5, 6]})
        pd.testing.assert_frame_equal(captured_df, expected_df)

这个方案无需修改原函数(满足Airflow的限制),也不需要读写文件(避开测试环境文件系统不可预测的问题),直接就能获取函数内部处理后的最终DataFrame实例。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 03:12:28