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

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

嘗試在 TCP 偵聽(tīng)器上提供服務(wù)時(shí),由于超時(shí),Go 測(cè)試明顯失敗

嘗試在 TCP 偵聽(tīng)器上提供服務(wù)時(shí),由于超時(shí),Go 測(cè)試明顯失敗

Go
慕后森 2023-07-10 10:10:02
我有這個(gè)單元測(cè)試:func TestServer(t *testing.T) {    db := prepareDBConn(t)    defer db.Close()    lis := bufconn.Listen(1024 * 1024)    t.Logf("Opened listener: %v", lis)    grpcServer := grpc.NewServer(        withUnaryInterceptor(),    )    t.Logf("Opened grpc server: %v", grpcServer)    signKey := getSignKey()    if signKey == nil {        t.Fatal("Failed to find or parse RSA private key")    }    verifyKeyErr := setVerifyKey()    if verifyKeyErr != nil {        t.Fatal("Failed to find or parse RSA public key")    }    pb.RegisterAuthServiceServer(grpcServer, newAuthServiceServer(db, signKey))    err := grpcServer.Serve(lis)    if err != nil {        t.Fatalf("Failed to listen: %+v", err)    }}如果我注釋掉最后 4 行:    // err := grpcServer.Serve(lis)    // if err != nil {    //   t.Fatalf("Failed to listen: %+v", err)    // }每次都會(huì)通過(guò),但無(wú)論出于何種原因,它都會(huì)在線路上變得很糟糕err := grpcServer.Server(lis)。我嘗試過(guò)使用真正的 TCP 偵聽(tīng)器(lis := bufconn.Listen與交換lis := net.Listen("tcp"))。它沒(méi)有告訴我出了什么問(wèn)題(除了超時(shí))并且似乎還參考了其他庫(kù)的測(cè)試?我通過(guò)調(diào)用測(cè)試vs-code,它使用以下命令:/usr/local/bin/go test -timeout 30s -run ^(TestServer)$我可以構(gòu)建并運(yùn)行該包,它完全按照我的預(yù)期工作,并且不會(huì)在那條線上失敗,所以我認(rèn)為我在單元測(cè)試方面做錯(cuò)了一些事情,但在這一點(diǎn)上我沒(méi)有太多要做的,而且我不這樣做對(duì) go 測(cè)試了解不多。
查看完整描述

2 回答

?
哆啦的時(shí)光機(jī)

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ù)。


查看完整回答
反對(duì) 回復(fù) 2023-07-10
?
富國(guó)滬深

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)用堆棧的一部分。


查看完整回答
反對(duì) 回復(fù) 2023-07-10
  • 2 回答
  • 0 關(guān)注
  • 154 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號(hào)

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