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

Go语言中S3/SQS事件JSON转结构体的单元测试用例咨询

Go语言S3/SQS事件反序列化的单元测试用例设计

针对你提供的unmarshal函数,除了Body为空的场景,可从以下几个维度设计单元测试用例:

合法正常场景

  • 完整嵌套的标准S3事件:构造包含完整S3事件结构的SQS消息Body,验证反序列化后s3Event的所有核心字段(如Bucket名称、对象键、事件类型)与预期完全匹配。
  • 含可选字段的S3事件:测试S3事件中存在或缺失可选字段(如userIdentity、requestParameters)的情况,确认反序列化无报错且存在的字段能正确赋值。

异常输入场景

  • SQS Body格式非法:
    • Body是无效JSON(如缺少闭合括号、语法错误),验证函数返回json.Unmarshal对应的语法错误。
    • Body是合法JSON但无Message字段,或Message字段类型非字符串(如数字、布尔值),验证第一阶段反序列化报错。
  • Message字段内容异常:
    • Message为空字符串,验证第二阶段反序列化报错。
    • Message是合法JSON但不符合S3Event结构(如缺少Records数组、字段名拼写错误、类型不匹配),验证函数返回对应反序列化错误。
  • 边界值测试:
    • Message是超大体积的S3事件JSON,验证反序列化的稳定性(若关注性能可加入耗时统计)。
    • Message含特殊字符(转义字符、Unicode字符),验证反序列化后字符解析正确。

特殊格式场景

  • 带多余字段的S3事件:构造包含events.S3Event未定义字段的JSON,验证函数能正确解析已知字段,忽略多余字段(Go JSON包默认行为,需确认符合预期)。
  • 字段名大小写不匹配:比如SQS Body中message为小写(结构体标签是json:"Message"),验证反序列化后e.Message为空,进而第二阶段报错,确认该行为符合预期。

测试代码示例

package yourpackage

import (
	"encoding/json"
	"testing"

	"github.com/aws/aws-lambda-go/events"
	"github.com/stretchr/testify/assert"
)

func TestUnmarshal_ValidFullEvent(t *testing.T) {
	// 构造完整的嵌套JSON结构
	sqsBody := `{"Message": "{\"Records\": [{\"s3\": {\"bucket\": {\"name\": \"test-bucket\"}, \"object\": {\"key\": \"test-key\"}}}]}" }`
	sqsMsg := events.SQSMessage{Body: sqsBody}

	result, err := unmarshal(sqsMsg)

	assert.NoError(t, err)
	assert.Len(t, result.Records, 1)
	assert.Equal(t, "test-bucket", result.Records[0].S3.Bucket.Name)
	assert.Equal(t, "test-key", result.Records[0].S3.Object.Key)
}

func TestUnmarshal_InvalidSQSBody(t *testing.T) {
	// 传入语法错误的JSON
	sqsMsg := events.SQSMessage{Body: `{"Message": "invalid-json`}
	result, err := unmarshal(sqsMsg)

	assert.Error(t, err)
	assert.IsType(t, &json.SyntaxError{}, err)
}

func TestUnmarshal_EmptyMessage(t *testing.T) {
	sqsBody := `{"Message": ""}`
	sqsMsg := events.SQSMessage{Body: sqsBody}

	result, err := unmarshal(sqsMsg)

	assert.Error(t, err)
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 00:55:13