Golang如何在lambda集成测试或单元测试中模拟aws sns

我想本地测试 lambda 函数调用,而不是使用 aws sns 服务。


func Handler(request events.APIGatewayProxyRequest) (events.APIGatewayProxyResponse, error){

    ...do some logic and db opeations.

    err := db.Create(something)

    if err != nil {

       msg := "something error."

       target := "sns:arn"

       // do sns notification

       sess := session.Must(session.NewSession())

       svc := sns.New(sess,&cfg)

       err = PublishNotification(svc, msg, target)

    }}


func PublishNotification(svc *sns.SNS, message string, target string) error {

      params := sns.PublishInput{

                Message:   &message,

                Subject:   &subject,

                TargetArn: &target,

}

      req, _ := svc.PublishRequest(&params)

      err := req.Send()

      if err != nil {

         return err

}

      return nil

}



func main(){

    lambda.Start(Handler)

}

现在一切正常。我想对这个 lambda 处理程序进行单元测试或集成测试。


func TestLabmdaWithSns(t *testing.T) {

        tests := []struct {

        request events.APIGatewayProxyRequest

}{

    request: events.APIGatewayProxyRequest{Body:"something"}

 }

 

 for _, test := range tests {

    response, err := Handler(test.request)

    // assert something

}


}

而且我不想在测试时发送 sns 通知。

我应该如何模拟这个 svc 或 PublishNotification 函数在本地测试时不向 sns 发布消息?


慕虎7371278
浏览 115回答 1
1回答

小怪兽爱吃肉

您应该在 PublishNotification 中使用接口 snsiface.SNSAPI 而不是 *sns.SNS。然后,您可以将 snsiface.SNSAPI 的模拟实现注入单元测试,如下所述:https ://docs.aws.amazon.com/sdk-for-go/api/service/sns/snsiface/
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go