pytest Mock类方法报错:TypeError: 'str' object is not callable
TypeError: 'str' object is not callable 错误原因解析
问题根源
你在使用mocker.patch时犯了两个关键错误:
错误传递了函数执行结果而非函数本身
代码里写的是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。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
相关产品推荐
相关产品推荐

