首页  >  文章  >  后端开发  >  当测试位于单独的目录中时,如何获取包的覆盖率统计信息?

当测试位于单独的目录中时,如何获取包的覆盖率统计信息?

Susan Sarandon
Susan Sarandon原创
2024-11-01 03:08:28884浏览

How Can I Get Coverage Stats for a Package When Tests Are in a Separate Directory?

单独包中测试的覆盖率统计信息

将测试从代码文件分离到不同的包中时,获取各个包的覆盖率统计数据变得很困难正在测试的包。考虑以下目录结构:

api_client:
    Client.go
    ArtistService.go
    ...
api_client_tests:
    ArtistService.Events_test.go
    ArtistService.Info_test.go
    UtilityFunction.go
    ...

运行 go test bandintown-api/api_client_tests -cover 仅提供对 UtilityFunction.go 文件的覆盖,忽略实际的 api_client 包。

解决方案:

要解决此问题,请使用以下命令:

go test -cover -coverpkg "api_client" "api_client_tests"

此命令允许您在专门为 api_client 包启用覆盖率测量的情况下运行测试。

包结构注意事项:

但是,值得注意的是,在 Go 中不建议将代码文件和测试拆分到不同的目录中。相反,将测试保留在同一个包中可确保它们正确地限制为与包的公共 API 交互。

黑盒测试的代码可访问性:

如果目标是执行黑盒测试,其中测试无法访问私有包级变量和函数,可以使用以下解决方法:

<code class="go">// api_client.go
package api_client

// will not be accessible outside of the package
var privateVar = 10

func Method() {
}

// api_client_test.go
package api_client_tests

import "testing"
import "api_client"  // import the package **without** renaming it

func TestBlackBox(t *testing.T) {
    api_client.Method()  // call the method from the "api_client" package
}</code>

这允许测试在不修改目录的情况下访问包级项目结构或违反封装规则。

以上是当测试位于单独的目录中时,如何获取包的覆盖率统计信息?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn