我在 src/ 下的子目录下有多个包,运行每个包的测试都go test
可以正常工作。
当尝试运行所有测试时go test ./...
,测试正在运行但它失败了..
测试针对本地数据库服务器运行,每个测试文件都有带有 db 指针的全局变量。
我试图运行测试-parallel 1
以防止数据库中的争用,但测试仍然失败。
这里有什么问题?
编辑:某些测试因缺少数据库条目而失败,我在每次测试之前和之后完全清除了数据库。我能想到为什么会发生这种情况的唯一原因是因为测试之间存在一些争用。
编辑2:
我的每个测试文件都有 2 个全局变量(使用 mgo):
var session *mgo.Session
var db *mgo.Database
它还具有以下设置和拆卸功能:
func setUp() {
s, err := cfg.GetDBSession()
if err != nil {
panic(err)
}
session = s
db = cfg.GetDB(session)
db.DropDatabase()
}
func tearDown() {
db.DropDatabase()
session.Close()
}
每个测试都使用setUp()
和启动defer tearDown()
cfg 也是:
package cfg
import (
"labix.org/v2/mgo"
)
func GetDBSession() (*mgo.Session, error) {
session, err := mgo.Dial("localhost")
return session, err
}
func GetDB(session *mgo.Session) *mgo.Database {
return session.DB("test_db")
}
编辑 3:
我将 cfg 更改为使用随机数据库,测试通过了。似乎来自多个包的测试在某种程度上是并行运行的。
是否可以强制go test
跨包按顺序运行所有内容?