第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機(jī)立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何在 go 中測試 pubsub 消息確認(rèn)?

如何在 go 中測試 pubsub 消息確認(rèn)?

Go
侃侃爾雅 2022-06-06 14:53:36
如何編寫一個單元測試來驗證消息是否真的被確認(rèn)了?我想模擬 pubsub 消息并驗證它Ack是否被調(diào)用但無法實現(xiàn)。func processMessage(ctx context.Context, msg *pubsub.Message) {    log.Printf("Processing message, data: %s", msg.Data)    msg.Ack()}
查看完整描述

2 回答

?
幕布斯7119047

TA貢獻(xiàn)1794條經(jīng)驗 獲得超8個贊

您可以創(chuàng)建一個包裝消息的接口和一個包裝接收函數(shù)類型的函數(shù)。


// message interface to pass to our message handler

type Message interface {

    GetData() []byte

    Ack()

}


// real message for pubsub messages

type msg struct {

    m *pubsub.Message

}


// returns real message data

func (i *msg) GetData() {

    return i.m.Data

}


// acks the real pubsub message

func (i *msg) Ack() {

    i.m.Ack()

}


// test message can be passed to the handleMessage function

type testMsg struct {

    d []byte

}


// returns the test data

func (t *testMsg) GetData() []byte {

    return d

}


// does nothing so we can test our handleMessage function

func (t *testMsg) Ack() {}


func main() {

    client, err := pubsub.NewClient(context.Background(), "projectID")

    if err != nil {

        log.Fatal(err)

    }

    sub := client.Subscription("pubsub-sub")

    sub.Receive(ctx, createHandler())

}


// creates the handler, allows us to pass our interface to the message handler

func createHandler() func(ctx context.Context, m *pubsub.Message) {

    // returns the correct function type but uses our message interface

    return func(ctx context.Context, m *pubsub.Message) {

        handleMessage(ctx, &msg{m})

    }

}


// could pass msg or testMsg here because both meet the interface Message

func handleMessage(ctx context.Context, m Message) {

    log.Println(m.GetData())

    m.Ack()

}


查看完整回答
反對 回復(fù) 2022-06-06
?
largeQ

TA貢獻(xiàn)2039條經(jīng)驗 獲得超8個贊

您可以通過使用接口和模擬來做到這一點,如下所示。


// Create an interface that'll be implemented by *pubsub.Message

type message interface{

    Ack()

}


// Accept the interface instead of the concrete struct

func processMessage(ctx context.Context, msg message) {

    log.Printf("Processing message, data: %s", msg.Data)

    msg.Ack()

}

現(xiàn)在,在測試文件中,創(chuàng)建一個模擬消息并確認(rèn)是否Ack被調(diào)用。您可以為此使用作證/模擬。


查看完整回答
反對 回復(fù) 2022-06-06
  • 2 回答
  • 0 關(guān)注
  • 139 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號