ホームページ  >  記事  >  バックエンド開発  >  Go で複数のパッケージ テストを連続して実行するにはどうすればよいですか?

Go で複数のパッケージ テストを連続して実行するにはどうすればよいですか?

Patricia Arquette
Patricia Arquetteオリジナル
2024-11-04 01:16:03996ブラウズ

How to Run Multiple Package Tests in Go Sequentially?

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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。