登录
首页 >  Golang >  Go问答

Go中的代码覆盖不完整是由于未导入包的原因

来源:stackoverflow

时间:2024-02-07 19:03:22 378浏览 收藏

Golang不知道大家是否熟悉?今天我将给大家介绍《Go中的代码覆盖不完整是由于未导入包的原因》,这篇文章主要会讲到等等知识点,如果你在看完本篇文章后,有更好的建议或者发现哪里有问题,希望大家都能积极评论指出,谢谢!希望我们能一起加油进步!

问题内容

我正在探索 go 语言。我尝试创建一个类似于 python 包的项目结构:

-src:
|- main.go
|- services:
  |- pipeline.go
|- core:
  |- utils.go
-test:
|- pipeline_test.go
-go.mod

但是,我在尝试计算代码覆盖率时遇到了问题。我运行了命令:

go test -coverprofile=coverage.out -covermode=atomic ./tests/...

但这仅计算导入文件的覆盖率,即测试文件中导入的包。测试中未导入的包(例如“main”和“core”)不会被考虑在内。在 python 中,所有文件都会被考虑在内。所以,我的问题是是否有一个解决方案来扫描所有文件,即使它们没有导入到测试文件中。


正确答案


我认为其他人可能已经在评论中提供了一些上下文,但让我明确地告诉你。

在 Go 中,您不会获得未测试的包的代码覆盖率结果。这实际上是一个有用的功能,因为它意味着您的覆盖率结果可以更好地预测您是否正在实际测试代码。在其他语言中,例如 C# 或 Python,包中的所有模块都包含在覆盖范围内,这可能会导致人为地降低数字,因为样板代码通常不需要由单元测试覆盖,并且通常由集成测试处理。在 go 中,除非您显式地为其添加测试,否则此代码将被排除。这也为您(开发人员)提供了隐式指南:如果您要向主模块添加测试,那么您可能应该将该代码拆分到一个可以为其添加测试的包中。

此外,关于您的项目结构,您不应该将 Pythonic 假设应用于 Go。将您的测试与这些测试应涵盖的代码放在同一个包中。通过执行 go get 导入代码时,不会包含测试代码,因此没有理由仅使用单独的包进行测试。当然,如果您确实希望将测试实用程序或测试支持对象包含在其他代码中,您仍然可以这样做,但一般来说,您应该将测试代码保留在应该运行的位置。

在您提供的示例中,pipeline_test.go 应移动到 pipeline.go。另外,如果您希望在 utils 中包含代码,那么您还应该添加一个 utils_test.go 文件。

好了,本文到此结束,带大家了解了《Go中的代码覆盖不完整是由于未导入包的原因》,希望本文对你有所帮助!关注golang学习网公众号,给大家分享更多Golang知识!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>