如何在不同Go测试文件中共享仅作用于测试范围的公共项
Go多测试文件共享限定测试作用域变量方案
Go语言本身原生支持你需要的使用场景,核心逻辑如下:
同一个包下所有后缀为_test.go的测试文件共享包级作用域,定义在任意测试文件包级位置(函数外部)的变量,所有同包测试文件都可以直接访问,且这类变量只会在测试编译阶段被包含,不会进入生产环境的二进制包,刚好匹配「类似全局变量但作用域仅限定在测试范围」的要求。
具体实现示例
你可以单独创建一个专门存放共享测试资源的文件,比如命名为shared_test.go,内容如下:
// shared_test.go 和其他测试文件属于同一个包 package your_pkg_name import "your/test/pkg/path" // 所有同包测试文件共享的变量 var item *test.Global
之后你目录下的1_test.go、2_test.go、3_test.go都可以直接读写这个item变量,无需额外引入。
注意事项
- 所有需要共享变量的测试文件必须属于同一个包,跨包的测试文件无法直接共享该类包级变量
- 共享变量必须定义在
_test.go后缀的测试文件中,不能写在普通业务源码文件内,否则会被编译到生产版本 - 如果需要统一控制共享变量的初始化和销毁逻辑,可以搭配
TestMain实现:
package your_pkg_name import ( "os" "testing" ) var item *test.Global func TestMain(m *testing.M) { // 测试执行前初始化共享变量 item = test.NewGlobal() // 运行所有测试用例 exitCode := m.Run() // 测试全部执行完成后回收资源 item.Cleanup() os.Exit(exitCode) }
- 可以将共享变量定义为小写开头的私有标识符,进一步限制其作用域仅在当前包的测试范围内可用。
内容的提问来源于stack exchange,提问作者ccd
相关产品推荐
相关产品推荐

