我有以下生产代码:
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
是否在单元测试中真正被调用?
非常简单:将您的回调命名为函数而不是匿名函数:
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()
}
现在,在单元测试中,您可以创建Context
和Message
的实例并将其传递给函数。但是,在这种情况下,这几乎没有道理。您要做的只是记录和确认消息,这些功能应该由上游项目进行单元测试。因此,构造消息实例和单元测试processMessage
会更有意义。