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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 13:48:03