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

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

Patricia Arquette
Patricia Arquetteオリジナル
2024-11-04 06:15:29207ブラウズ

How to Run Go Tests Sequentially for Multiple Packages to Avoid Contention?

Go: 複数のパッケージのテストの同時実行: 競合の解決

サブディレクトリの下で複数のパッケージをテストする場合、go test で個別のテストを実行すると成功する。ただし、 go test ./... を使用してすべてのテストを同時に実行しようとすると失敗します。この問題は、共有データベースなどの共通リソースにアクセスする際の潜在的な競合に起因します。

複数のテストが同じデータベースで同時に実行される場合、個々のテスト ファイルで使用されるグローバル変数によって競合が発生する可能性があります。これを防ぐには、-Parallel 1 フラグの使用を検討してください。これにより、各パッケージ内でテストが順次実行されます。

-Parallel 1 を使用しているにもかかわらず、テストは競合により失敗する可能性があります。これは、異なるパッケージのテストが同時に実行されていることを示唆しています。パッケージ間の並列処理の可能性を排除するための回避策は、bash スクリプトまたはエイリアスを使用してテストを手動で実行することです。次のコマンド シーケンスでこれを実現します。

find . -name '*.go' -printf '%h\n' | sort -u | xargs -n1 -P1 go test

このコマンドは *.go ファイルを含む一意のサブディレクトリをリストし、各サブディレクトリに対して go test を順番に実行します。

代わりに、次のシェル スクリプトまたはエイリアスを使用できます:

function gotest(){   find  -name '*.go' -printf '%h\n' | sort -u | xargs -n1 -P1 go test; }

getest . を実行すると、現在のディレクトリ内のすべてのテストを順番に実行できます。

go test ./... ほど単純ではありませんが、これは回避策により、パッケージ間でテストが順番に実行されるようになり、テストの並列実行によって生じる競合の問題が解決されます。

以上が競合を避けるために複数のパッケージに対して Go テストを連続して実行するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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