src/ の下のサブディレクトリの下に複数のパッケージがあり、各パッケージのテストを実行しても問題なくgo test
動作しています。
テストが実行されている状態ですべてのテストを実行しようとするgo test ./...
と失敗します..
テストはローカル データベース サーバーに対して実行され、各テスト ファイルには db ポインターを持つグローバル変数があります。
データベースでの競合を防ぐために でテストを実行しようとしました-parallel 1
が、テストはまだ失敗します。
ここで何が問題になる可能性がありますか?
編集:一部のテストは、欠落している DB エントリで失敗しています。各テストの前後に DB を完全にクリアします。なぜこれが起こっているのか私が考えることができる唯一の理由は、テスト間の競合のためです。
編集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
パッケージ間ですべてを順番に実行することを強制することは可能ですか?