猿问

如果测试文件在 go 1.4 及以下的系统上运行,我该如何跳过它?

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


我能够使用runtime.Version()并进行各种比较来获得 Go 运行时版本。


但是,测试文件导入golang.org/x/net/http2. 该http2软件包需要request.Cancel()from net/http,但仅适用于 Go 1.5+。


这会导致我的 CI 环境中出现这些错误,从而导致构建失败:


../../../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)

我尝试添加// +build go1.5到文件的顶部,但没有奏效。


无论如何我可以限制一个单元测试文件,以便它只在 Go 1.5+ 系统上构建和测试?


慕哥9229398
浏览 164回答 1
1回答

慕运维8079593

构建约束是正确的方法。但请注意,您的错误消息是指在 Go 1.6http2中添加的包,因此您至少需要构建约束。go1.6构建约束// +build go1.5将导致使用Go 1.5 及更高版本编译文件。因此,如果您希望您的测试文件仅使用 Go 1.6 及更高版本编译和运行,请使用// +build go1.6也不要忘记:约束可以出现在任何类型的源文件中(不仅仅是 Go),但它们必须出现在文件顶部附近,前面只能有空行和其他行注释。这些规则意味着在 Go 文件中,构建约束必须出现在 package 子句之前。为了将构建约束与包文档区分开来,一系列构建约束后面必须跟一个空行。一个工作示例:1  // +build go1.623  package yourpackage
随时随地看视频慕课网APP

相关分类

Go
我要回答