登录
首页 >  Golang >  Go问答

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

来源:Golang技术栈

时间:2023-04-05 15:46:00 236浏览 收藏

各位小伙伴们,大家好呀!看看今天我又给各位带来了什么文章?本文标题《如果测试文件在 go 1.4 及以下的系统上运行,我该如何跳过它?》,很明显是关于Golang的文章哈哈哈,其中内容主要会涉及到golang等等,如果能帮到你,觉得很不错的话,欢迎各位多多点评和分享!

问题内容

我有一个文件,其中包含一些应该在 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+ 系统上构建和测试?

正确答案

构建约束是正确的方法。

但请注意,您的错误消息是指在 Go 1.6http2中添加的包,因此您至少需要构建约束。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

今天关于《如果测试文件在 go 1.4 及以下的系统上运行,我该如何跳过它?》的内容就介绍到这里了,是不是学起来一目了然!想要了解更多关于golang的内容请关注golang学习网公众号!

声明:本文转载于:Golang技术栈 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>