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

如何对 pubsub 进行单元测试接收回调

如何对 pubsub 进行单元测试接收回调

Go
慕丝7291255 2022-06-06 14:46:50
我有以下生产代码:func pullMessages(ctx context.Context, sub *pubsub.Subscription) {    err := sub.Receive(ctx, func(ctx context.Context, msg *pubsub.Message) {        log.Printf("Got message: %q\n", string(msg.Data))        processMessage(msg)        msg.Ack()    })    if err != nil {        log.Printf("Receive: %v", err)    }}我如何验证processMessage在单元测试中实际被调用?
查看完整描述

1 回答

?
繁花如伊

TA贡献2012条经验 获得超12个赞

很简单:让你的回调成为一个命名函数而不是匿名函数:


func pullMessages(ctx context.Context, sub *pubsub.Subscription) {

    if err := sub.Receive(ctx, rcvCallback); err != nil {

        log.Printf("Receiving message: %s",err)

    }

}


func rcvCallback (ctx context.Context, msg *pubsub.Message) {

        log.Printf("Got message: %q\n", string(msg.Data))

        processMessage(msg)

        msg.Ack()

}

现在,在您的单元测试中,您可以创建 aContext和 a的实例并将其Message传递给您的函数。但是,在这种情况下,这几乎没有意义。您只需记录和确认消息,这些功能应该由上游项目进行单元测试。因此,构造一个 message 和 unit test 的实例会更有意义processMessage。


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

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号