gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 22:13:53 28 4
gpt4 key购买 nike

我有以下生产代码:

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()
}

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

关于unit-testing - 如何对pubsub进行单元测试接收回调,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61898901/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com