![](/img/trans.png)
[英]Django 1.6+ test not Discovering unit tests located in a tests sub-directory
[英]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. MARAND和fgmarand/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.