amazon-web-services - 在 Go 中测试 lambda 处理程序时如何模拟 AWS Lambda 上下文?
问题描述
我有一个用 Go 编写的 S3 触发的 AWS Lambda。我已经能够成功测试所有辅助代码,但是,我一直在尝试测试 lambda 处理程序。
这是我的处理程序的签名:
func HandleRequest(ctx context.Context, s3Event events.S3Event)
这是测试代码:
package main
import (
"context"
"encoding/json"
"testing"
"github.com/aws/aws-lambda-go/events"
"github.com/stretchr/testify/assert"
)
func TestHandleRequest(t *testing.T) {
// 1. read JSON from file
inputJSON, err := readJSONFromFile("./testdata/s3-event.json")
if err != nil {
t.Errorf("could not open test file. details: %v", err)
}
// 2. de-serialize into Go object
var inputEvent events.S3Event
if err := json.Unmarshal(inputJSON, &inputEvent); err != nil {
t.Errorf("could not unmarshal event. details: %v", err)
}
// 3. How can I mock the context.Context?
assert.NoError(t, HandleRequest(context.Context, inputEvent))
}
我不知道应该如何模拟 context.Context。我在网上也找不到任何例子。
有人知道吗?我的代码看起来是否适合测试 S3 触发的 Go Lambda?
解决方案
'context.Context' 被设计为一个不可变的值(即使它实际上是一个接口)。所以我不会担心嘲笑它。
有两种方法可以创建空上下文('context.Background()' 和 'context.TODO()')。我将从这些开始。如果您想在上下文中设置某些内容,请查看上下文包上的文档。
推荐阅读
- prolog - prolog 如何能够如此快地递归执行大型计算操作?像 10000 阶乘
- android - 如何在 Android Studio KeyStores creator 中设置不同的存储和密钥密码?
- firebase-realtime-database - 在 Firebase 实时数据库上执行 AppCheck 无效
- windows - WDAC 策略未阻止路径且未触发任何事件
- python - 以下使用内置排序函数的函数的时间复杂度是多少?
- javascript - 后退按钮不呈现信息 - 反应路由器 dom v5.2
- xamarin - Xamarin Multilingual App Ios App store 空白问题
- amazon-web-services - 需要从 aws kinesis 流中公开 HTTP API,所有无服务器,最好的选择是什么?
- android - 从 .split 创建的列表中获取倒数第二个项目
- java - 服务 SPRING BOOT 中的 DataIntegrityViolationException