我想在Go中使用测试和示例创建一个包作为子目录,以保持工作区更清洁。这有可能吗?如果可以的话怎么样?
所有文档总是将测试代码放在与其他代码相同的位置,这在某种程度上是更好还是只是常规?
答案 0 :(得分:140)
请注意,您可以“递归地”运行go test
:您需要列出您要测试的所有软件包。
如果您是Go项目的根文件夹,请键入:
go test ./...
“Description of package lists”符号在“command go
”的“{{3}}”部分中有所描述:
导入路径是一种模式,如果它包含一个或多个“
./...
”通配符,每个通配符都可以匹配任何字符串,包括空字符串和包含斜杠的字符串。这样的模式扩展到
...
树中找到的所有包目录,其名称与模式匹配。作为特例,
GOPATH
匹配x/...
以及x
的子目录。
例如,x
扩展为net/...
并在其子目录中打包。
如果您将net
个文件保存在子文件夹中,“_test.go
”命令就可以将其取出。
但是:
话虽如此,我仍然希望将go test ./...
文件放在主源文件旁边:它更容易找到。
答案 1 :(得分:12)
将您的测试与代码放在一个名为file_test.go
的文件的同一目录中,其中“file”是您正在测试的源代码文件的名称。这是惯例,我发现它最适合我自己的经验。
如果go test
工具不够自动化,您可以查看 GoConvey ,其中包含一个自动更新和运行传统Go的网页用户界面测试以及GoConvey测试(基于行为,并且比传统的Go测试更自我记录)。
答案 2 :(得分:3)
基于VonC的答案,
对于那些希望将测试保存在子文件夹中的人,说test
,然后运行
go test ./...
会尝试在每个文件夹中运行测试,即使是不包含任何测试的文件夹,因此在随后的报告中对于非测试文件夹也有一个?
。
运行
go test ./.../test
相反,它将仅定位到您的test
文件夹,因此,干净的报告仅关注您的测试文件夹。
答案 3 :(得分:0)
我通常不进行测试,但您可以将文件分组到目录中并使用像
这样的导入 import "./models"
如果是一级出局的话
import "../models
如果是一个级别而且是
例如,对于:
./models/todo.go
./test/todo_test.go
从todo.go
测试todo_test.go
,
您在todo_test.go
中的导入将是
import "../models"