如何Mock函数内部初始化的类以验证其方法调用是否符合预期
问题根因
当前测试不生效的核心原因是混淆了Mock类和Mock实例的调用关系:你通过mock.patch替换的是Handler类本身,而run是Handler类实例的成员方法,并非类本身的方法,直接对被Mock的类对象断言run被调用必然无法匹配执行逻辑。
修复方案
首先确认patch路径符合哪里使用就在哪里patch的原则:只要handler函数所在的模块内确实是引用的function.Handler,你当前使用的function.handler.Handler路径是正确的。
仅需要调整断言的对象为Handler实例的Mock对象即可,修复后的测试代码如下:
def test_main_call_handler(): with mock.patch('function.handler.Handler') as mock_handler_cls: # 获取Handler实例化后的Mock对象 mock_handler_instance = mock_handler_cls.return_value handler({}, object()) # 可选断言:Handler实例化时传入了正确的参数 mock_handler_cls.assert_called_once_with(event={}, context=mock.ANY) # 断言实例的run方法被调用 mock_handler_instance.run.assert_called_once()
如果需要自定义run方法的返回值,直接给mock_handler_instance.run.return_value赋值即可,示例:
mock_handler_instance.run.return_value = {"status": "success"}
内容的提问来源于stack exchange,提问作者Anton Bukreev
相关产品推荐
相关产品推荐

