如果测试文件在1.4及以下版本的系统上运行,如何跳过测试文件?

时间:2016-06-02 08:44:21

标签: unit-testing go

我有一个文件,其中包含一些应该在Go 1.5 +上运行的测试。

我可以使用runtime.Version()获取Go运行时版本并进行各种比较。

但是,测试文件会导入golang.org/x/net/http2http2包需要来自request.Cancel()的{​​{1}},但这仅适用于Go 1.5 +。

这导致我的CI环境中的这些错误导致构建失败:

net/http

我尝试将../../../golang.org/x/net/http2/transport.go:214: req.Cancel undefined (type *http.Request has no field or method Cancel) ../../../golang.org/x/net/http2/transport.go:218: req.Cancel undefined (type *http.Request has no field or method Cancel) ../../../golang.org/x/net/http2/transport.go:777: req.Cancel undefined (type *http.Request has no field or method Cancel) 添加到文件的顶部,但它不起作用。

我是否可以限制单元测试文件,以便仅在Go 1.5+系统上构建和测试?

1 个答案:

答案 0 :(得分:7)

build constraints是正确的方法。

但请注意,您的错误消息引用http2added in Go 1.6,因此您至少需要go1.6构建约束。

构建约束

// +build go1.5

将导致使用 Go 1.5及更高版本编译文件。因此,如果您希望您的测试文件仅使用Go 1.6及更高版本进行编译和运行,请使用

// +build go1.6

也不要忘记:

  

约束可能出现在任何类型的源文件中(不仅仅是Go),但它们必须在文件顶部附近显示,前面只有空行和其他行注释。这些规则意味着在Go文件中,构建约束必须出现在package子句之前。

     

要区分构建约束和包文档,一系列构建约束必须后跟一个空行

一个工作示例:

1  // +build go1.6
2
3  package yourpackage