繁体   English   中英

子目录中的 Golang 测试

[英]Golang tests in sub-directory

我想在 Go 中创建一个包,其中包含该包的测试和示例作为子目录,以保持工作空间更清洁。 这可能吗?如果可以,怎么办?

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

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

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

go test ./...

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

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

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

作为一种特殊情况, x/...匹配x以及x的子目录。
例如, net/...在其子目录中扩展为net和 packages。


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

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

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


对于代码覆盖率:

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

请参阅Frédéric G. MARANDfgmarand/gocoverstats中的“如何绘制随时间变化的 Go 测试覆盖率”,为 Go 项目的 CI 集成生成聚合覆盖率统计信息。

go-cover-treemap.io也很有趣。

已编辑

基于 VonC 的回答,

这个答案在go1.11中有效。 尚未在更高版本中go测试。

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

go test ./...

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

跑步

go test ./.../test

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

警告

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

将您的测试与您的代码一起放在名为file_test.go的文件中的同一目录中,其中“file”是您正在测试的源代码文件的名称。 这是惯例,我发现它在我自己的经验中是最好的。

如果go test工具对您来说不够自动化,您可以查看GoConvey ,它有一个 Web UI,可以自动更新和运行传统 Go 测试以及 GoConvey 测试(基于行为,并且更自我) - 记录比传统的 Go 测试)。

我通常不做测试,但你可以将你的文件分组到目录中并使用 import like

import "./models"如果是一级
import "../models如果是一级输出和一级输入

例如,对于:
./models/todo.go
./test/todo_test.go

要从todo_test.go测试todo.go ,您在todo_test.go中的导入将是

import "../models"

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM