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

如何mock pandas中sample函数返回的采样值以用于单元测试?

Pandas sample 函数单元测试的Mock实现方案

你可以通过mock Series的sample方法,自定义采样返回的数值,完全控制最终的sum计算结果,常见实现方式如下:

1. 基于Python内置unittest框架实现

直接mock业务代码中调用的sample方法,指定返回值即可,示例代码:

import unittest
from unittest.mock import patch
import pandas as pd
# 替换为你实际的业务模块导入路径
from your_module import your_target_func

class TestSampleCalculation(unittest.TestCase):
    def test_sample_sum(self):
        # 自定义采样返回的数值序列,可按需修改为你想要的测试值
        expected_sample_series = pd.Series([2, 4, 6, 8, 10])
        # 注意:patch的路径必须为你业务代码中实际调用sample方法的路径
        with patch("your_module.Series.sample") as mock_sample_method:
            mock_sample_method.return_value = expected_sample_series
            # 调用待测试的业务函数
            actual_result = your_target_func()
            # 校验sample方法是否按预期参数调用
            mock_sample_method.assert_called_once_with(35, random_state=111)
            # 校验最终计算结果,此处预期值为自定义序列的和 2+4+6+8+10=30
            self.assertEqual(actual_result, 30)

2. 基于pytest + pytest-mock实现

写法更简洁,示例如下:

import pandas as pd
# 替换为你实际的业务模块导入路径
from your_module import your_target_func

def test_sample_sum(mocker):
    expected_sample_series = pd.Series([2, 4, 6, 8, 10])
    mock_sample_method = mocker.patch("your_module.Series.sample")
    mock_sample_method.return_value = expected_sample_series
    
    actual_result = your_target_func()
    
    mock_sample_method.assert_called_once_with(35, random_state=111)
    assert actual_result == 30

注意事项

  • patch路径必须准确:需要mock的是业务代码中实际调用的sample方法所在路径,不要直接mock pandas官方库的路径,否则无法生效。
  • 如果你不想使用mock方案,也可以直接构造固定内容的测试DataFrame,由于你调用sample时指定了固定random_state=111,采样结果是固定的,提前计算好sum值做断言也可以实现测试,但灵活度低于mock方案。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.21 08:15:05