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

如何在本地使用Pytest模拟Mssparkutils?

如何在本地模拟Mssparkutils进行测试

方案1:使用unittest.mock.patch模拟全局对象

由于生产函数直接引用了全局的mssparkutils,你可以通过patch针对函数所在模块模拟该对象(假设生产函数位于my_module.py),无需修改生产代码。

示例测试代码:

from unittest.mock import patch, MagicMock
import my_module  # 导入生产函数所在的模块

def test_list_files():
    # 构建模拟的mssparkutils层级结构
    mock_fs = MagicMock()
    mock_fs.ls.return_value = ["file1.txt", "file2.csv"]  # 预设ls方法的返回值
    mock_mssparkutils = MagicMock()
    mock_mssparkutils.fs = mock_fs

    # 替换生产模块中的mssparkutils对象
    with patch('my_module.mssparkutils', mock_mssparkutils):
        my_module.list_files("/test/path")
        # 验证调用逻辑是否符合预期
        mock_fs.ls.assert_called_once_with("/test/path")

方案2:使用pytest的monkeypatch注入模拟对象

借助pytest的monkeypatch fixture,在测试执行前将模拟的mssparkutils注入到生产函数所在模块的命名空间中:

from unittest.mock import MagicMock
import my_module
import pytest

def test_list_files(monkeypatch):
    # 创建模拟的fs和mssparkutils对象
    mock_fs = MagicMock()
    mock_fs.ls.return_value = ["test_file.parquet"]
    mock_mssparkutils = MagicMock()
    mock_mssparkutils.fs = mock_fs

    # 将模拟对象注入生产模块
    monkeypatch.setattr(my_module, 'mssparkutils', mock_mssparkutils)

    # 执行测试并验证
    my_module.list_files("/data/path")
    mock_fs.ls.assert_called_once_with("/data/path")

核心注意事项

  • 必须针对生产函数所在的模块进行模拟操作,而非全局命名空间,Python的模块导入机制会按模块命名空间解析变量引用。
  • 所有模拟逻辑都在测试代码中完成,完全不影响生产环境的代码结构。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 10:05:56