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

Python单元测试如何mock来自输入参数的函数的返回值

问题根因

你的写法不生效核心是两个错误:

  • 调用python_file.load_data时第一个参数传入了None,函数内部执行调用的a实例和你提前设置了mock返回值的self.a完全无关联,自然不会触发预设返回值
  • 额外声明的mocked = mock.Mock()没有实际作用,属于冗余代码
正确实现方案

方案1:构造Mock对象作为入参(最推荐,无需依赖真实A类实例)

from unittest import mock

@classmethod
def setUpClass(cls):
    cls.data_needed_return = read_file()

def test_function(self):
    # 构造mock的a对象,直接给它的get_function方法预设返回值
    mock_a = mock.Mock()
    mock_a.get_function.return_value = self.data_needed_return

    import python_file
    # 把mock_a作为第一个参数传入load_data
    r1, r2, r3 = python_file.load_data(mock_a, None, None)
    # 可选:验证get_function调用参数是否符合预期
    mock_a.get_function.assert_called_once_with(None, None)

方案2:给真实A类实例的方法打桩

如果你必须使用真实的A类实例self.a作为入参,直接把打桩后的实例传入即可:

from unittest import mock

@classmethod
def setUpClass(cls):
    cls.a = A.create()
    cls.data_needed_return = read_file()

def test_function(self):
    # 给真实实例的get_function方法打桩,覆盖原有逻辑
    with mock.patch.object(self.a, 'get_function', return_value=self.data_needed_return) as mock_get_func:
        import python_file
        # 把打桩后的self.a作为第一个参数传入
        r1, r2, r3 = python_file.load_data(self.a, None, None)
        # 可选:验证调用参数
        mock_get_func.assert_called_once_with(None, None)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 09:27:03