我想在 Go 中创建一个包,其中包含该包的测试和示例作为子目录,以保持工作空间更清洁。这可能吗?如果可以,怎么办?
所有文档总是将测试代码与其他代码放在同一个位置,这在某种程度上更好还是只是约定?
请注意,您可以“递归”运行go test
:您需要列出所有要测试的包。
如果您位于 Go 项目的根文件夹中,请键入:
go test ./...
' ./...
' 符号在“命令”的“包列表描述”部分中进行了描述:go
如果导入路径包含一个或多个“
...
”通配符,则它是一种模式,每个通配符都可以匹配任何字符串,包括空字符串和包含斜杠的字符串。这种模式扩展到在
GOPATH
树中找到的所有名称与模式匹配的包目录。作为一种特殊情况,
x/...
匹配x
以及x
's 子目录。
例如,net/...
扩展net
并打包到其子目录中。
如果您将_test.go
文件保存在子文件夹中,“ go test ./...
”命令将能够提取它们。
但:
话虽如此,我仍然希望将_test.go
文件保留在主源文件旁边:它更容易找到。
已编辑
基于 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"
if 是一级输出
import "../models
if 是一级输出和一级输入
例如,对于:
./models/todo.go
./test/todo_test.go
要测试todo.go
,todo_test.go
您的导入todo_test.go
将是
import "../models"