我有以下生产代码: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。
- 1 回答
- 0 关注
- 141 浏览
添加回答
举报
0/150
提交
取消