6

Javaクライアント/サーバーの統合テストを実行できるようにしたいと思います(組み込みJettyを使用)。さらに、統合テスト中に、さまざまなサーバーとクライアントのソースコードバージョンを組み合わせて使用​​できるようにしたいと思います。

私はこれを達成するための最良のgitまたはmavenバージョン戦略は何であるか疑問に思っています:

  1. クライアントとサーバーに同じgitリポジトリを使用すると、さまざまなサーバーバージョンのコードをチェックアウトし、さまざまなクライアントバージョンのコードに対してテストすることが困難になります。

  2. 個別のgitリポジトリを使用する(クライアントsrcと統合テストを備えた1番目のリポジトリ、サーバーsrcを備えた2番目のリポジトリ)-統合テストを実行するために両方のリポジトリをチェックアウトし、それらの間の相対パスを想定する必要もあります。

  3. クライアントのsrcコードをmavenバージョンのサーバーWARに対してのみテストすると、開発者がチェックアウトされたサーバーのソースコードと一致しないサーバーWARに対してテストを実行するという正直な間違いが発生する可能性があります。

4

2 に答える 2

4

3 つ目の課題を指摘します。統合テストにはバグがある可能性があるため、テスト バージョンも個別に制御したい場合があります。

複数のリポジトリを調整するために、git のサブモジュール機能を使用しました。クライアント リポジトリとサーバー リポジトリの両方への参照を含む新しいリポジトリを作成します。この親リポジトリにも、基本的なテスト ドライバーを配置できます。

新しい開発者がチームに参加すると、この親レポgit submodule update --initを複製し、実行してクライアントとサーバーのサブモジュールを複製できます。そうすれば、他の人と同じように相対パスが設定されます。

ただし、たとえば、クライアントリポジトリにサーバーが にあると想定させるのは好きではありません../server/。したがって、私がこれを処理した方法は、親レポが必要なパスをサブモジュールに渡すようにすることです。たとえば、実行test.shする親リポジトリに

make -C client SERVER_PATH=$(pwd)/server test

あなたの場合、すべてのテスト コードを親リポジトリに配置することもできます。次に、サブモジュールへの相対パスを安全に想定できます。

この配置の興味深い副次的な利点: 特定のバージョンの組み合わせを記録する git コミットを作成できます。サブモジュールでチェックアウトされたバージョンは、親リポジトリでコミットしたときに記録されるためです。これを使用して、テストに合格したバージョンの組み合わせのブランチまたはタグのコレクションを作成できます。

于 2012-11-11T21:21:56.373 に答える
1

潜在的なgit管理の問題を引き起こすことなく、すでに十分な変数が進行しているため、プロセスをシンプルに保つことをお勧めします。そのために、サブモジュールは避けます。代わりに、テスト マトリックスでクライアント リポジトリとサーバー リポジトリの両方をテストするために、ブランチとタグの明確な組み合わせを開発者に提供します。

タグを使用すると、特にバグが最初のラウンドから修正された後に、マトリックスで同じテストを簡単に再利用して繰り返すことができます。

要するに、解決策 2 をお勧めします。相対パスの仮定は、サブモジュールによってもたらされる潜在的な混乱よりも望ましいものです。

于 2012-11-17T15:39:59.663 に答える