亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

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

無法生成 gin-gonic 服務器應用程序的代碼覆蓋率報告

無法生成 gin-gonic 服務器應用程序的代碼覆蓋率報告

Go
縹緲止盈 2023-06-05 17:40:44
go版本:go版本go1.11.2 linux/amd64gin 版本(或提交參考):提交 #5acf660操作系統:Ubuntu 16.04LTS描述我正在嘗試使用示例應用程序為 gin 服務器生成代碼覆蓋率報告。示例.gopackage mainimport (        "github.com/gin-gonic/gin")func main() {        r := gin.Default()        r.GET("/ep1", getEp1)        r.GET("/ep2", getEp2)        //r.Run()}func getEp1(c *gin.Context) {}func getEp2(c *gin.Context) {}這是我的測試文件:sample_test.gopackage mainimport (        "fmt"        "testing")func TestRunMain(t *testing.T) {        fmt.Println("TestRunMain ...")        main()}生成代碼覆蓋率的命令:$ go test -covermode=count -coverpkg ./... -test.coverprofile cover.cov測試運行主要...[GIN-debug] [WARNING] 創建一個引擎實例,其中已經附加了 Logger 和 Recovery 中間件。[GIN 調試] [警告] 在“調試”模式下運行。在生產中切換到“發布”模式。使用環境:export GIN_MODE=release使用代碼:gin.SetMode(gin.ReleaseMode)[GIN 調試] GET /ep1 --> _/home/ubuntu/tmp/sample.getEp1(3 個處理程序)[GIN 調試] GET /ep2 --> _/home/ubuntu/tmp/sample.getEp2(3 個處理程序)經過覆蓋率:100.0% 的語句在 ./...好的_/home/ubuntu/tmp/sample 0.013s這是 cover.cov 文件的內容:模式:計數/home/ubuntu/tmp/sample/sample.go:7.13,12.2 3 1/home/ubuntu/tmp/sample/sample.go:14.30,15.2 0 0/home/ubuntu/tmp/sample/sample.go:17.30,18.2 0 0到目前為止一切都很好!但如您所見,我還沒有運行服務器。在文件:sample.go 中,當我取消注釋行 r.Gin() 時,服務器運行。要退出應用程序,我需要執行 Ctrl+C。在這種情況下,不會生成代碼覆蓋率報告。我錯過了什么?r.Gin() 在 sample.go 中未注釋的命令行輸出:$ go test -covermode=count -coverpkg ./... -test.coverprofile cover.cov測試運行主要...[GIN-debug] [WARNING] 創建一個引擎實例,其中已經附加了 Logger 和 Recovery 中間件。[GIN 調試] [警告] 在“調試”模式下運行。在生產中切換到“發布”模式。使用環境:export GIN_MODE=release使用代碼:gin.SetMode(gin.ReleaseMode)[GIN 調試] GET /ep1 --> _/home/ubuntu/tmp/sample.getEp1(3 個處理程序)[GIN 調試] GET /ep2 --> _/home/ubuntu/tmp/sample.getEp2(3 個處理程序)[GIN-debug] 環境變量 PORT 未定義。默認使用端口:8080[GIN-debug] 在 :8080 上監聽和服務 HTTP^Csignal:中斷失敗 _/home/ubuntu/tmp/sample 0.711scover.go 的內容:$ 貓封面.cov模式:計數誰能告訴我我在這里缺少什么?
查看完整描述

1 回答

?
拉莫斯之舞

TA貢獻1820條經驗 獲得超10個贊

我不太清楚杜松子酒是什么,但我想我可以看到你的問題。在您的測試中,您正在調用具有 http 偵聽器的 main,這就是您抱怨的行。似乎您認為您需要 CTRL + C 才能讓您的應用程序作為某種守護進程運行,但這是錯誤的,您正在做的是提示您的應用程序過早結束,這會中斷您的測試并輸出錯誤消息。

要回答您的問題,您需要創建一個測試套件,您可以在其中運行測試并在這些測試停止時選擇它以放下您的 http 服務器。

func TestMain(m *testing.M) {

? ? /*set up your router or?

? ? ? ? database connections or

? ? ? ? anything else you'll need

? ? */

? ? exitCode := m.Run()

? ? os.Exit(exitCode)

}

現在,在為您的端點運行測試時,您將需要發出模擬 http 請求,有點像真實用戶。

我將提供一個通用的小例子。

func ATest(t* testing.T){? ??

? ? req, _ := http.NewRequest("GET", "/route", nil)

? ? responseRecorder = httptest.NewRecorder()

? ? router.ServeHTTP(responseRecorder, req)

? ? if (http.StatusOk != responseRecorder.Code){

? ? ? ? t.Fail()

? ? }

}

讓我知道這是否對您有幫助。


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

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號