我想在Go中创建一个带有测试和示例的包作为子目录,以保持工作区的清洁。这有可能吗?
所有文档总是将测试代码与其他代码放在同一位置,这在某种程度上还是惯例上更好?
我想在Go中创建一个带有测试和示例的包作为子目录,以保持工作区的清洁。这有可能吗?
所有文档总是将测试代码与其他代码放在同一位置,这在某种程度上还是惯例上更好?
Answers:
请注意,您可以go test
“递归” 运行:您需要列出要测试的所有软件包。
如果您位于Go项目的根文件夹中,请键入:
go test ./...
“ ./...
”符号在“ 命令 ” 的“ 软件包列表说明 ” 部分中进行了描述:go
如果导入路径包含一个或多个
...
通配符,则通配符是一种模式,每个通配符都可以匹配任何字符串,包括空字符串和包含斜杠的字符串。这样的模式扩展到在
GOPATH
名称与模式匹配的树中。作为特殊情况,
x/...
匹配x
和x
的子目录。
例如,net/...
扩展为net
并将其打包在其子目录中。
如果将_test.go
文件保存在子文件夹中,则“ go test ./...
”命令将能够提取它们。
但:
话虽如此,我仍然希望将_test.go
文件保留在主源文件的旁边:更容易找到。
将测试和代码一起放在一个文件的同一目录中file_test.go
,其中“文件”是您正在测试的源代码文件的名称。这是惯例,以我个人的经验,这是最好的。
如果该go test
工具还不够自动化,您可能会考虑使用GoConvey,它具有一个Web UI,该UI会自动更新并运行传统的Go测试以及GoConvey测试(基于行为,并且更具自记录性)比传统的Go测试)。
go test
也可以用于子文件夹。请参阅下面的答案
已编辑
基于VonC的答案,
此答案在中有效go1.11
。尚未在鞋帮中测试go
版本中。
对于那些喜欢将测试保存在子文件夹中的人,请说test
,然后运行
go test ./...
将尝试在每个文件夹中运行测试,即使是不包含任何测试的文件夹,因此?
在后续报告中也将包含非测试文件夹。
跑步
go test ./.../test
相反,它只会定位到您的test
文件夹,从而使干净的报告仅关注您的测试文件夹。
警告
请注意,使用测试子文件夹将阻止覆盖报告的计算。go的方法是将测试文件保留在包文件夹中。
go test ./.../test
返回go: warning: "./.../test" matched no packages
//不仅针对测试文件夹。go版本go1.13 darwin / amd64
我通常不做测试,但是您可以将文件分组到目录中,然后使用import
import "./models"
如果是一级
import "../models
如果是一级输出而又是一级输入
例如,用于:
./models/todo.go
./test/todo_test.go
测试todo.go
从todo_test.go
,您在进口todo_test.go
会
import "../models"
go test ./...
将在当前文件夹和所有子文件夹上运行测试。请参阅下面的答案