2 回答

TA貢獻(xiàn)1779條經(jīng)驗(yàn) 獲得超6個(gè)贊
正如我所看到的,您正在嘗試對(duì) gRPC 服務(wù)器進(jìn)行單元測(cè)試。您嘗試使用的策略對(duì)于單元測(cè)試來(lái)說(shuō)是相當(dāng)過(guò)大的。
為簡(jiǎn)單起見(jiàn),您應(yīng)該有一個(gè)服務(wù)器結(jié)構(gòu)來(lái)保存互連的部分,例如:數(shù)據(jù)庫(kù)連接。
因此,您只需初始化數(shù)據(jù)庫(kù)連接并將其傳遞給服務(wù)器結(jié)構(gòu)。這是模擬數(shù)據(jù)庫(kù)的正確位置。之后,您將擁有啟動(dòng) gRPC 服務(wù)器實(shí)例,因?yàn)槟恍枰獡艽?gRPC 進(jìn)行單元測(cè)試。
然后,您可以在初始化的 Server 實(shí)例上調(diào)用預(yù)期的 rpc 函數(shù)。它看起來(lái)更加干凈和可維護(hù)。

TA貢獻(xiàn)1790條經(jīng)驗(yàn) 獲得超9個(gè)贊
服務(wù)是一個(gè)阻塞調(diào)用。它將等待新的連接并在它們進(jìn)來(lái)時(shí)無(wú)限期地處理它們。這就是它的全部目的 - 在服務(wù)器關(guān)閉或崩潰之前它不會(huì)返回。根據(jù)文檔Serve
:
Serve 接受監(jiān)聽(tīng)器上的傳入連接,為每個(gè)連接創(chuàng)建一個(gè)新的 ServerTransport 和服務(wù) goroutine。服務(wù) goroutine 讀取 gRPC 請(qǐng)求,然后調(diào)用注冊(cè)的處理程序來(lái)回復(fù)它們。當(dāng) lis.Accept 因致命錯(cuò)誤而失敗時(shí),Serve 返回。
對(duì)于您的其他問(wèn)題:
它沒(méi)有告訴我出了什么問(wèn)題(除了超時(shí))
這就是問(wèn)題所在。go test
有時(shí)間限制,而測(cè)試超過(guò)了時(shí)間。其實(shí)沒(méi)有什么可說(shuō)的了。它提供了堆棧跟蹤,這有助于確定超時(shí)的原因,因?yàn)樗鼈兏嬖V您每個(gè) goroutine 超時(shí)時(shí)的位置(例如 goroutine 5 正在等待新連接Listener.Accept
)。
似乎也參考了其他庫(kù)的測(cè)試
不是測(cè)試(那些將在_test.go
文件中),只是代碼引用的庫(kù)中的代碼。它們是堆棧跟蹤,通常包含來(lái)自標(biāo)準(zhǔn)庫(kù)和/或第三方庫(kù)的代碼,因?yàn)樗歉檿r(shí)該 goroutine 的調(diào)用堆棧的一部分。
- 2 回答
- 0 關(guān)注
- 154 瀏覽
添加回答
舉報(bào)