我在src /下的子目录下有多个软件包,使用每个软件包运行测试都go test可以正常工作。
go test
尝试运行所有测试时,所有测试go test ./...都在运行,但失败。
go test ./...
这些测试是针对本地数据库服务器运行的,每个测试文件都有带有db指针的全局变量。
我尝试运行测试-parallel 1以防止在数据库中争用,但是测试仍然失败。
-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()
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在软件包之间依次运行所有内容?
显然,go test -p 1运行按顺序运行所有内容(包括构建),但在go help test或go help testflag
go test -p 1
go help test
go help testflag