Как смоделировать лямбда-контекст AWS при тестировании лямбда-обработчика в Go? - PullRequest
0 голосов
/ 26 сентября 2018

У меня есть S3-триггерная AWS Lambda, написанная на Go.Я смог успешно протестировать весь вспомогательный код, однако я застрял, пытаясь протестировать лямбда-обработчик.

Вот подпись моего обработчика:

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?

Ответы [ 2 ]

0 голосов
/ 27 сентября 2018

'context.Context' разработан как неизменяемое значение (даже если это буквально интерфейс).Так что я не буду беспокоиться о насмешках над ним.

Есть два способа создания пустых контекстов (context.Background () и context.TODO ()).Я бы начал с них.Если вы хотите установить что-то в контексте, ознакомьтесь с документацией по пакету контекста.

0 голосов
/ 27 сентября 2018

Удовлетворит ли context.TODO ваши потребности?

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

...