2

次の形式のマルチモジュール プロジェクトでゴールの failsafe:integration-test を実行しています。

親:
--------Module_A
--------Module_B

Class_A1 (モジュール A) で何かをテストする Test_B1_IT (モジュール B) を渡すとします。

ここで Class_A1 を変更すると、テストは失敗します。しかし、ゴールを走れば

mvn failsafe:integration-test

テストは引き続きパスします。デプロイ ゴールを実行するまで、変更は反映されません。目標は、現在のリアクターからの最新のビルドではなく、リポジトリからの jar を使用することだと思います。
統合テストを実行すると機能します...ただし、すべての単体テストも実行されるようです (単体テストをスキップして _IT 統合テストを実行する方法はないようです)。

また、目標の統合テストに対して、またはフェイルセーフの目標の前に「コンパイル」を追加した場合にも機能することがわかります。ただし、最初のオプションはすべてのテストを実行します (ユニット + 統合)

これはフェイルセーフ プラグインの問題ですか、それともマルチモジュール プロジェクトで maven が依存関係を処理する方法だけですか? コンパイルオプションを追加するのが最善の方法ですか?

4

1 に答える 1

1

まず最初に、次のようにコマンド ラインでskip を指定するだけで単体テストをスキップできます。

mvn -Dmaven.test.skip=true lifecycle

統合テストを実行したい場合は、failsafe:integration-test ゴールを呼び出さないでください。統合テスト前のフェーズと統合テスト後のライフサイクル フェーズが欠落しているためです。

より良いアプローチは、呼び出しを介して Maven のリアクターを使用することです。

mvn -D... -am -pl Module_A  lifecylcephase

-am スイッチは、すべての依存モジュールを確実にコンパイルします。

さらに、統合テストを別のモジュールに入れて、次のように簡単にすることをお勧めします。

 +-- root 
      +--- pom.xml
      +--- mod1 (pom.xml)
      +--- mod2 (pom.xml)
      +--- mod-it (pom.xml)

mod-it は、次のようなプロファイルを使用してアクティブ化できます。

mvn -Prun-its ...

モジュールの使用について書いたことは真実です。ゴールを呼び出すだけの場合、依存関係はローカル リポジトリに対して解決され、もちろんリアクター経由では解決されません。その場合、リアクターが実行されていないためです。

それにもかかわらず、統合テスト フェーズでは、すべての単体テストが既に実行されていることを前提としているため、Maven がそのライフサイクルで行うように、最初に単体テストを実行することは理にかなっています。ただし、いくつかのプロパティを使用して詳細に制御することで、それに影響を与えることができます。ただし、通常、単体テストの実行は問題にならないはずです。単体テストは高速に実行する必要があるためです。

于 2012-06-14T16:53:39.497 に答える