Go Test Coverage - Go Tool Not Recognize err !

我正在学习一些有关 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 工具没有检测到它,我错过了什么?


暮色呼如
浏览 99回答 1
1回答

慕神8447489

好的。不确定,但工作。似乎测试顺序在 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% 的测试覆盖率。我不知道这是一个问题还是应该是那样的......但是,现在,它运行良好。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go