子目录中的 Golang 测试

新手上路,请多包涵

我想在 Go 中创建一个包,并将包的测试和示例作为子目录,以保持工作区更干净。这可能吗?如果可能的话怎么办?

所有文档总是将测试代码与其他代码放在同一位置,这在某种程度上更好还是只是约定俗成?

原文由 The Graceful Penguin 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.1k
2 个回答

请注意,您 可以 运行 go test “递归地”:您需要 列出所有要测试的包

如果您位于 Go 项目的根文件夹中,请键入:

 go test ./...

./... ‘ 符号在“ 命令 go ”的“ 包列表说明”部分中进行了描述:

如果导入路径包含一个或多个“ ... ”通配符,则它是一种模式,每个通配符都可以匹配任何字符串,包括空字符串和包含斜杠的字符串。

这种模式扩展到 GOPATH 树中名称与模式匹配的所有包目录。

作为特例, x/... 匹配 x 以及 x 的子目录。

例如, net/... 扩展为 net 并打包到其子目录中。


如果您将 _test.go 文件保存在子文件夹中,“ go test ./... ”命令将能够拾取它们。

但:

  • 您需要在导出的变量和函数(在测试中使用)前加上包的名称,以便测试文件能够访问包导出的内容。
  • 您不会访问未导出的内容。

话虽这么说,我仍然希望将 _test.go 文件保留在主源文件旁边:它更容易找到。


对于代码覆盖率:

 go test -coverpkg=./... ./...

请参阅 Frédéric G. MARANDfgmarand/gocoverstats 的“ 如何绘制 Go 测试覆盖率随时间的变化”,以生成 Go 项目的 CI 集成的总体覆盖率统计数据。

go-cover-treemap.io 很有趣。

原文由 VonC 发布,翻译遵循 CC BY-SA 4.0 许可协议

已编辑

基于 VonC 的回答,

此答案在 go1.11 中有效。尚未在上层 go 版本中进行测试。

对于那些喜欢将测试保存在子文件夹中的人,比如 test ,然后运行

go test ./...

将尝试在 每个 文件夹中运行测试,即使是那些不包含任何测试的文件夹,因此在随后的非测试文件夹报告中有 ?

跑步

go test ./.../test

相反,将只针对您的 test 文件夹,因此只有一个干净的报告只关注您的测试文件夹。

警告

请注意,使用测试子文件夹将阻止覆盖率报告计算。 Go 的哲学是将测试文件留在包文件夹中。

原文由 avi.elkharrat 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题