去测试:仅运行包含构建标记的测试?

时间:2019-01-13 03:59:46

标签: go testing

我有一组使用build标记定义的长期运行的测试。例如,

// file some_test.go
//+build func_test

(rest of file with test cases)

我还有许多其他较短的运行测试,而没有这个build标志。 有没有办法我可以轻松地仅运行包含构建标记“ func_test”的测试?

请注意,如果我只运行go test -tags func_test,它将运行所有测试,包括some_test.go中的测试。

3 个答案:

答案 0 :(得分:1)

按照golang文档https://golang.org/pkg/go/build/

build标签列出了将文件包含在软件包中的条件。因此,如果只想对构建标记func_test运行测试,则需要为其他测试提供一个不同的标记。

这里是一个示例: 我的测试目录中有以下2个测试文件。

func_test.go

//+build test_all func_test

package go_build_test

import (
    "fmt"
    "testing"
)

func TestNormal(t *testing.T) {
    fmt.Println("testing:", t.Name())

}

other_test.go

//+build test_all,!func_test

package go_build_test

import "testing"
import "fmt"

func TestOtherCase(t *testing.T) {
    fmt.Println("testing:", t.Name())
}

现在,如果要运行所有测试。

$ go test -tags=test_all
testing: TestNormal
testing: TestOtherCase
PASS
ok      _/D_/Project/ARC/source/prototype/go/src/go-build-test  0.186s

仅运行func_test

$ go test -tags=func_test
testing: TestNormal
PASS
ok      _/D_/Project/ARC/source/prototype/go/src/go-build-test  1.395s

诀窍是使用带有AND / OR条件的// + build注释。

答案 1 :(得分:0)

您可以按照惯例命名您的测试。 即让您长时间运行的测试函数以 TestLong_ 开头 然后运行它们 go test ./... -run TestLong -tags func_test

答案 2 :(得分:-3)

=之后需要-tags标记

go test -tags=func_test