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

AWS Lambda单元测试报错:test_lambda_handler参数数量不匹配

修复AWS Lambda单元测试的参数错误及其他问题

问题根源分析

错误test_lambda_hander() takes two positional arguments but 3 were given核心原因是mock目标与逻辑设置错误,同时测试代码还存在其他影响运行的问题:

  • Mock目标错误:你patch的是boto3.client,但目标Lambda里的client是模块加载时就初始化的全局变量,顶层patch无法影响已创建的实例,导致mock逻辑混乱,传递多余参数。
  • 未mock依赖函数:json_parser是原函数的依赖,测试环境中未定义该函数,运行会触发NameError。
  • 返回值不匹配:原函数返回整数类型的状态码,你设置的expected是字符串格式的字典,完全不匹配。
  • mock客户端设置错误:mock_client.return_value = mock_client会导致递归调用风险,破坏mock逻辑。

修复后的测试代码

from sample_lambda import lambda_handler
import unittest
from unittest import mock

class Testsamplelambda(unittest.TestCase):

    @mock.patch("sample_lambda.client")  # 改为patch模块内的全局client变量
    @mock.patch("sample_lambda.json_parser")  # mock依赖的json_parser函数
    def test_lambda_handler(self, mock_json_parser, mock_client):
        # 设置json_parser的模拟返回值
        mock_json_parser.return_value = {"parsed_key": "test_value"}
        
        # 设置mock client的invoke方法返回预期响应
        mock_invoke_response = {"StatusCode": 200}
        mock_client.invoke.return_value = mock_invoke_response
        
        expected = 200  # 与原函数返回的整数状态码匹配
        test_event = {
            "Records": [{
                "data": [{}]
            }]
        }               
        actual = lambda_handler(test_event, {})
        self.assertEqual(actual, expected)
        
        # 可选:验证依赖函数是否按预期调用
        mock_json_parser.assert_called_once_with(test_event)
        mock_client.invoke.assert_called_once_with(
            FunctionName='FuctionARN',
            InvocationType='RequestResponse',
            Payload='{"parsed_key": "test_value"}'
        )

关键修复点说明

  • 修正Mock目标:直接patchsample_lambda.client,确保mock覆盖到原函数实际使用的客户端实例。
  • Mock依赖函数:添加@mock.patch("sample_lambda.json_parser")并设置返回值,避免测试依赖json_parser的具体实现。
  • 正确设置mock响应:让mock_client.invoke.return_value返回包含StatusCode的字典,符合原函数的读取逻辑。
  • 匹配返回类型:将expected改为整数200,与原函数返回值类型一致。
  • 添加调用验证:通过assert_called_once_with确保依赖函数和Lambda客户端的调用参数符合预期,提升测试可靠性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 02:24:54