【发布时间】:2015-06-25 22:11:11
【问题描述】:
我有一个具有这种项目结构的 GO 项目(每个包中有多个此类文件)。
- api
- userHandler.go
- userHandler_test.go
- database
- user.go
- user_test.go
在 user.go 中,我有 User 结构和创建/获取/更新用户的函数(我使用的是 GORM,但这不是问题)。在 user_test.go 中。
我想为每个不同的文件清理数据库(删除所有数据或处于某种状态),所以我尝试为每个文件创建 1 个套件(使用 Testify),然后使用 SetupSuite功能,但行为似乎不是确定性的,可能我做错了什么。
所以我的问题是:
- 共享数据库连接的最佳方式是什么?使用全局变量是最佳选择?
- 在每个 file_test.go 运行之前,在数据库中创建一次表然后使用自定义数据初始化数据库的最佳方法是什么?
现在我也有一个奇怪的错误:运行
go test path/package1
go test path/package2
一切正常,但如果我运行(用于测试所有包)
cd path && go test ./...
我的错误似乎不是确定性的,这就是为什么我猜测数据库连接没有正确处理
【问题讨论】:
-
-
我的意思是在设置中为数据库播种并在拆除时删除这些记录。必须逐个测试,因为这是相关信息所在的上下文。
-
谢谢,我也更新了我的问题,因为我对多个包有一个奇怪的问题,这就是为什么我猜数据库连接没有正确处理
-
把 db 的东西放在一个通用的测试包中,并在其他包的测试文件中导入。在您的示例中,测试包可能应该处于 package1 和 2 的级别。
-
我没有测试包,但我遵循 test_file.go 约定,所以我在每个源文件附近都有测试文件。