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

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

Go Test Coverage - Go Tool Not Recognize err !

Go Test Coverage - Go Tool Not Recognize err !

Go
暮色呼如 2022-10-24 15:28:27
我正在學習一些有關 Golang 測試覆蓋率的知識,并且遇到了一些有趣的問題。我有一個公平的基本代碼來調用 API 和執行http.Client.Do(request). 執行后,我檢查錯誤并在找到時返回。resp, err := Client.Do(request)if err != nil {    return response, err}此外,我還為它添加了測試。我在哪里模擬Do函數并返回錯誤。mocks.DoFunc = func(*http.Request) (*http.Response, error) {    return nil, errors.New("hello world")}當我記錄if err != nil條件時,我可以看到我的代碼正在運行并被這個簡單的評估捕獲。我的問題在執行時開始 go tool cover -html=coverage.out。輸出表明未涵蓋此條件。所以,為什么我可以在登錄時檢查它,而 go 工具沒有檢測到它,我錯過了什么?
查看完整描述

1 回答

?
慕神8447489

TA貢獻1780條經驗 獲得超1個贊

好的。不確定,但工作。

似乎測試順序在 TestCoverage 上非常重要,創建從最少到第一個評估的測試就可以if err != nil了。

我的代碼做一個簡單的獲取 API:

  1. 創建一個響應對象

  2. 格式化 URL + ID

  3. 創建一個 Http.NewREquest

  4. 評估 NewRequest 錯誤

  5. 執行 http.Client.Do(request)

  6. 評估做錯

  7. 等等等等……

...

response := &Response{}


url := fmt.Sprintf(pokeapiURLById, pokeId)


request, err := http.NewRequest(http.MethodGet, url, nil)


if err != nil {

    return nil, err

}


resp, err := Client.Do(request)


if err != nil {

    return nil, err

}

...


按以下順序創建的測試。


func TestFetchById_WhenHttpNewRequestFails(t *testing.T) {...


func TestFetchById_WhenClientDoFails(t *testing.T) {...

首先,我測試 NewRequest 錯誤,然后測試 Client.Do(req) 錯誤。這樣我就獲得了 80% 的測試覆蓋率......


當我更改測試方法的順序時:


func TestFetchById_WhenClientDoFails(t *testing.T) {...


func TestFetchById_WhenHttpNewRequestFails(t *testing.T) {...

我有 100% 的測試覆蓋率。我不知道這是一個問題還是應該是那樣的......但是,現在,它運行良好。


查看完整回答
反對 回復 2022-10-24
  • 1 回答
  • 0 關注
  • 114 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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