为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
慕虎7371278 2022-10-24 15:26:53
我想本地测试 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 发布消息?
查看完整描述

1 回答

?
小怪兽爱吃肉

TA贡献1852条经验 获得超1个赞

您应该在 PublishNotification 中使用接口 snsiface.SNSAPI 而不是 *sns.SNS。然后,您可以将 snsiface.SNSAPI 的模拟实现注入单元测试,如下所述:https ://docs.aws.amazon.com/sdk-for-go/api/service/sns/snsiface/


查看完整回答
反对 回复 2022-10-24
  • 1 回答
  • 0 关注
  • 114 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信