首頁  >  文章  >  後端開發  >  Gomock 未回傳預期值

Gomock 未回傳預期值

PHPz
PHPz轉載
2024-02-05 22:15:041057瀏覽

Gomock 未返回预期值

問題內容

我是一位經驗豐富的程式設計師,但對 go 來說還是個新手。我正在編寫一些日誌記錄測試,出於這些目的,我產生了 logsink 類別的模擬(使用 mockgen )。由於該部分都是自動生成的,我認為我們可以假設那裡沒有任何問題。

這是我的測試程式碼:

func TestLogging(t *testing.T) {
    ls := mock.NewMockLogSink(gomock.NewController(t))
    ls.EXPECT().Init(gomock.Any())
    const logLevel = 1
    ls.EXPECT().Enabled(gomock.Any()).AnyTimes().Do(func(level int) bool {
        return level <= logLevel
    })
    log.Set(logr.New(ls))
    ls.EXPECT().Info(gomock.Any(), "Foo").Times(1)
    log.Info("Foo")
    ls.EXPECT().Info(gomock.Any(), "Bar").Times(0)
    log.V(2).Info("Bar")
}

但是這個測試失敗了,因為「foo」日誌永遠不會被呼叫。我單步執行程式碼,發現我的expect().do() 程式碼按預期被調用,並返回true,但在模擬程式碼中,它將logger .sink.enabled() 的結果視為false

我做錯了什麼?我是否缺少一個秘密開關?


正確答案


好吧,事實證明 .do() 故意忽略傳回值。這是程式碼中的文件:

// Do declares the action to run when the call is matched. The function's
// return values are ignored to retain backward compatibility. To use the
// return values call DoAndReturn.

向後相容性。正確的。公共領域的血腥坑,如果你問我...

以上是Gomock 未回傳預期值的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:stackoverflow.com。如有侵權,請聯絡admin@php.cn刪除