我正在學習一些有關 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 工具沒有檢測到它,我錯過了什么?
uj5u.com熱心網友回復:
行。不確定,但作業。
似乎測驗順序在 TestCoverage 上非常重要,創建從最少到第一個評估的測驗if err != nil就可以了。
我的代碼做一個簡單的獲取 API:
- 創建一個回應物件
- 格式化 URL ID
- 創建一個 Http.NewREquest
- 評估 NewRequest 錯誤
- 執行 http.Client.Do(request)
- 評估做錯
- 等等等等……
...
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% 的測驗覆寫率。我不知道這是一個問題還是應該是那樣的......但是,現在,它運行良好。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/408318.html
標籤:
