我们目前正在处理一个狂欢项目,测试数量已经失控。我想在tests
目录下创建一些软件包,以便将控制器测试与模型测试等区分开来(例如tests/controllers/
,tests/models/
等)。
当我这样做时,revel test命令停止查看这些文件。
我在网上找到了一条建议,用...
跟踪我的测试命令,但是当我这样做时,我收到错误消息,说它无法导入我的项目。
可以这样做,还是所有测试文件都必须在tests
目录中?如果可能,您如何在子包中运行测试?
答案 0 :(得分:0)
您可以将测试本身移动到可导入的包中(即不在_test.go
文件中),然后使用它们两次。子目录中的_test.go
个文件可能类似于:
package subdir_test
import "github.com/blah/project/parent/subdir/tests"
func TestPackage(t *testing.T) {
tests.Run(t)
}
使用TB.Run
,您可以使用go test
命令行参数使其变得更好:
package tests // subdir
import "testing"
func Run(t *testing.T) {
for _, test := range testCases { // or whatever
test.Run(t)
}
}
当然,父目录只能调用他们的子目录' Run
方法:
package parent_test
import (
"testing"
p "github.com/blah/project/parent/tests"
s "github.com/blah/project/parent/subdir/tests"
)
func TestPackage(t *testing.T) {
p.Run(t)
}
func TestSubPackages(t *testing.T) {
s.Run(t)
}
我建议避免使用go list ./...
等变体,因为许多工具并没有真正准备妥善处理(例如运行覆盖不会产生单个组合报告,使大型项目的事情变得复杂,以及它还列出了可能并不总是有意义的销售代码)