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

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

在 Go-kit 中為 make 處理函數(shù)編寫單元測試

在 Go-kit 中為 make 處理函數(shù)編寫單元測試

Go
精慕HU 2023-04-04 14:26:00
我的問題特定于 Go-kit 以及如何在其中組織代碼。我正在嘗試為以下功能編寫單元測試:func MakeHandler(svc Service, logger kitlog.Logger) http.Handler {    orderHandler := kithttptransport.NewServer(       makeOrderEndpoint(svc),       decodeRequest,       encodeResponse,    )    r := mux.NewRouter()    r.Handle("/api/v1/order/", orderHandler).Methods("GET")    return r}編寫適當?shù)膯卧獪y試的正確方法是什么?我見過如下例子:sMock := &ServiceMock{}h := MakeHandler(sMock, log.NewNopLogger())r := httptest.NewRecorder()req := httptest.NewRequest("GET", "/api/v1/order/", bytes.NewBuffer([]byte("{}")))h.ServeHTTP(r, req)然后測試請求的主體和標頭。但這看起來不像是適當?shù)膯卧獪y試,因為它調用了代碼的其他部分 ( orderHandler)。是否可以只驗證返回的內容MakeHandler()而不是在請求期間?
查看完整描述

1 回答

?
搖曳的薔薇

TA貢獻1793條經(jīng)驗 獲得超6個贊

是的,該測試的方向是正確的。您不應該嘗試測試返回的處理程序的內部結構,因為該第三方包將來可能會以您沒有預料到的方式發(fā)生變化。

是否可以只驗證從 MakeHandler() 返回的內容而不是在請求期間?

不是很好。MakeHandler()返回一個接口,理想情況下你會在測試中只使用接口方法。

您可以查看由返回的類型的文檔,mux.NewRouter()看看具體類型中是否有任何字段或方法可以為您提供信息,但這可能會很痛苦 - 無論是為了理解測試(很少使用類型來了解)以及由于未來對mux包的修改可能會如何影響您的代碼而不破壞測試。

編寫適當?shù)膯卧獪y試的正確方法是什么?

你的例子實際上是在正確的方向。測試時MakeHandler(),您正在測試它返回的處理程序是否能夠處理所有路徑并為每個路徑調用正確的處理程序。所以你需要調用這個 ServeHTTP()方法,讓它做它自己的事情,然后測試它是否正常工作。僅內省處理程序并不能保證實際使用過程中的正確性。

不過,您可能需要發(fā)出實際有效的請求,以便能夠根據(jù)響應正文或標頭了解調用了哪個處理程序。這應該使測試達到一個相當合理的狀態(tài)。(我想你已經(jīng)有了)

同樣,我會為將來添加的每條路線添加一個基本的子測試。詳細的處理程序測試可以寫在單獨的函數(shù)中。


查看完整回答
反對 回復 2023-04-04
  • 1 回答
  • 0 關注
  • 102 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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