一尘不染

前往:如何对多个软件包运行测试?

go

我在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在软件包之间依次运行所有内容?


阅读 212

收藏
2020-07-02

共1个答案

一尘不染

显然,go test -p 1运行按顺序运行所有内容(包括构建),但在go help testgo help testflag

2020-07-02