Golang在子目录中测试

时间:2013-10-05 16:50:04

标签: build go

我想在Go中使用测试和示例创建一个包作为子目录,以保持工作区更清洁。这有可能吗?如果可以的话怎么样?

所有文档总是将测试代码放在与其他代码相同的位置,这在某种程度上是更好还是只是常规?

4 个答案:

答案 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"