Amazon web services 在Go中测试Lambda处理程序时,如何模拟AWS Lambda上下文?

Amazon web services 在Go中测试Lambda处理程序时,如何模拟AWS Lambda上下文?,amazon-web-services,go,aws-lambda,Amazon Web Services,Go,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" "githu

我有一本用围棋写的书。我已经能够成功地测试所有辅助代码,但是,我一直在尝试测试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.TODO
满足您的需要吗


'context.context'被设计成一个不可变的值(即使它实际上是一个接口)。所以我不想嘲笑它


有两种方法可以创建空上下文(“context.Background()”和“context.TODO()”)。我会从这些开始。如果您想在上下文中设置一些内容,请查看上下文包中的文档。

我自己没有尝试过,但是,也许可以从SDK中查看一下。通过这种方式,您应该能够添加lambda自己添加的数据。您可以使用包中的其他函数构造父上下文,并添加截止日期/取消截止日期等。我不知道,如果AWS对上下文有任何其他魔法,那么这可能不会完全复制所有功能。为什么
HandleRequest
没有
http.Request,http.ResponseWriter
对?如果它是一个处理者,你怎么处理它?是的,我开始得出同样的结论,我不应该担心嘲笑它。特别是因为我在亚马逊找不到任何测试。谢谢