Go での複数のパッケージ テストの実行
go test ./... を使用してサブディレクトリの下で複数のパッケージのテストを実行する場合、ユーザーはテストがグローバル変数とデータベースの相互作用に依存している場合、問題が発生します。これは、テストが同時に実行され、競合や失敗が発生する可能性があるためです。
問題の原因
この問題の主な原因は、異なるパッケージ内のテストが-Parallel 1 が指定されている場合でも、並列実行します。これにより、グローバル変数やデータベース接続などの共有リソースの競合が発生する可能性があります。
解決策
go test -p 1 (文書化されていないフラグ) を使用する
@Gal Ben-Haim が提案しているように、文書化されていないフラグ go test -p 1 を使用して、すべてのパッケージを強制的にシリアルでビルドおよびテストすることができます。これにより、テストが順番に実行され、競合が防止されます。
カスタム シェル スクリプトまたはエイリアス
文書化されていないフラグの使用が望ましくない場合は、カスタム シェル スクリプトまたはエイリアスエイリアスを作成して、順次実行を強制しながら go test ./... の動作をエミュレートできます。例:
<code class="bash">find . -name '*.go' -printf '%h\n' | sort -u | xargs -n1 -P1 go test</code>
セットアップ関数と破棄関数の例
次に、セットアップ関数と破棄関数を使用してデータベースのセットアップとクリーンアップを処理する方法の例を示します。
<code class="go">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() }</code>
結論
複数のパッケージのテストを確実に順次実行するには、文書化されていないフラグ go test -p 1 を使用するか、カスタム シェル スクリプトまたはエイリアスを作成することができます。テストを順番に実行します。このアプローチを実装することで、並列実行によって引き起こされる競合や障害を回避できます。
以上がGo で複数のパッケージ テストを連続して実行するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。