我有以下生產代碼: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 關注
- 160 瀏覽
添加回答
舉報
0/150
提交
取消