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
相关产品推荐
相关产品推荐

