首頁 > 後端開發 > Golang > 主體

Gomock 未回傳預期值

PHPz
發布: 2024-02-05 22:15:04
轉載
1056 人瀏覽過

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
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板