将revel测试组织到子包

时间:2017-05-17 15:40:50

标签: testing go revel

我们目前正在处理一个狂欢项目,测试数量已经失控。我想在tests目录下创建一些软件包,以便将控制器测试与模型测试等区分开来(例如tests/controllers/tests/models/等)。

当我这样做时,revel test命令停止查看这些文件。

我在网上找到了一条建议,用...跟踪我的测试命令,但是当我这样做时,我收到错误消息,说它无法导入我的项目。

可以这样做,还是所有测试文件都必须在tests目录中?如果可能,您如何在子包中运行测试?

1 个答案:

答案 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 ./...等变体,因为许多工具并没有真正准备妥善处理(例如运行覆盖不会产生单个组合报告,使大型项目的事情变得复杂,以及它还列出了可能并不总是有意义的销售代码)