mock sql_query返回值时报Need a valid target to patch错误如何解决
报错原因
@mock.patch装饰器要求传入合法的mock目标:即需要mock的对象的完整导入路径字符串,你传入的是sql_query的调用语句,不属于可mock的目标对象,因此触发类型错误。- 原测试代码没有接收
@mock.patch注入的mock对象,后续设置返回值的方式也不符合mock语法要求,会调用到真实的sql_query函数而非mock对象。 - 额外说明:你的测试目标是
is_valid_group_2_user,只要mock掉它调用的sql_query即可,不需要额外mockdatabase_connection,mock后的sql_query不会执行内部的数据库连接逻辑。
修复后的测试代码
假设你的业务代码都存放在lambda_function.py模块中,测试代码修改如下:
@mock.patch("lambda_function.sql_query") def test_is_valid_group_2_user(self, mock_sql_query): # 配置mock的sql_query返回值为True mock_sql_query.return_value = True test_email = "test@email.co.uk" test_event = "event" # 执行被测函数并断言结果 self.assertEqual(lambda_function.is_valid_group_2_user(test_email, test_event), test_event) # 可选校验:sql_query的入参符合预期 mock_sql_query.assert_called_once_with( "group_2_account_id", "group_2_account", "user_email_address", test_email )
如果需要测试邮箱不存在的异常场景,只需修改mock的返回值为False,同时用assertRaises断言抛出对应异常即可。
内容的提问来源于stack exchange,提问作者L44TXF
相关产品推荐
相关产品推荐

