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

pytest Mock类方法报错:TypeError: 'str' object is not callable

TypeError: 'str' object is not callable 错误原因解析

问题根源

你在使用mocker.patch时犯了两个关键错误:

  1. 错误传递了函数执行结果而非函数本身
    代码里写的是mocker.patch("python_tools.pytest_samples.load_data.DataSet.load_data", mock_load()),这里的mock_load()会立即执行,返回字符串'mock load'。这就导致DataSet.load_data被替换成了一个字符串,而不是可调用的函数。当后续调用dataset.load_data()时,本质是尝试调用一个字符串,自然触发TypeError: 'str' object is not callable。

  2. Mock函数未兼容实例方法的self参数
    DataSet.load_data是实例方法,调用时会自动把实例本身作为第一个参数(self)传入。你的mock_load函数没有定义这个参数,即使修正了第一个问题,运行时也会因为参数不匹配报错。

修正后的测试代码

from python_tools.pytest_samples.load_data import slow_load


def test_slow_load():
    assert "Data" in slow_load()


def test_slow_load(mocker):
    assert "Data" in slow_load()

    expected = 'mock load'

    def mock_load(self):  # 添加self参数兼容实例方法
        return 'mock load'

    # 传递函数对象mock_load,而非执行结果mock_load()
    mocker.patch("python_tools.pytest_samples.load_data.DataSet.load_data", mock_load)
    actual = slow_load()
    assert actual == expected

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 00:45:46