在 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))
}

我不知道我应该如何嘲笑上下文。上下文。 我在网上也找不到任何例子。

有人知道吗? 我的代码在测试 S3 触发的 Go Lambda 时看起来是否习惯

'context.Context' 被设计为一个不可变的值(即使它实际上是一个接口(。所以我不会担心嘲笑它。

有两种方法可以创建空上下文("上下文。背景(("和"上下文。TODO(('(。我会从这些开始。如果要在上下文中设置某些内容,请查看有关上下文包的文档。

context.TODO能满足您的需求吗?

https://golang.org/pkg/context/#TODO

最新更新