4

Equinox/OSGi、Tycho を使用して Eclipse RCP プラットフォームで開発を行うプロジェクトに参加しました。

OSGi のクラスパス/クラスローディング メカニズム、tycho、equinox の仕組みなどに徐々に慣れてきました。

テスト バンドル (ターゲット バンドルのフラグメント) に集めてモッキングを使用して単純な単体テストを作成していますが、ClassNotFound エラー、ソース コードの添付に関する問題が発生しています。テストを rcp プラグイン テストとして実行する、または統合テスト スコープで tycho を使用するなどの推奨事項を見てきました。ただし、これらのアプローチはすべて、テストの実行が非常に遅く、非生産的であることがわかりました。

私が理解している限り、この環境 (Tycho、Eclipse RCP、またはその両方) の依存関係解決メカニズムは、私の想定とは少し異なります。テストを満たすために新しい実装をホスト バンドルに追加すると、ホスト バンドルに対して mvn install (tycho が引き継ぐ) を実行しない限り、すべての新しい実装がテスト バンドルによって取得されません。依存関係が不足しているため、プロジェクトの完全なインストールが必要になる場合があります。私が試した別の方法は、JUnit プラグイン テストとしてテストを実行することでした。そのメソッドも、tycho の依存関係の解決のために非常に遅く、すべてのバンドルをロードしています。

単体テストを実行するための最良のアプローチは何ですか? (単体テストと言うときは、相互作用がモックされ、ミリ秒単位でテストが実行される単体テストの真の定義を意味します)。

4

1 に答える 1

2

テストが OSGi に依存しない限り、EclipseでRun as > JUnit Testと同じように実行できます。これにより、OSGi ランタイムなしでテストが開始されますが、通常のクラスパスとすべてのバンドルが通常の JAR として扱われます。これは、テストとテスト対象のコードがバンドルのアクティベーションやサービスなどの OSGi ランタイムから何も要求しない限り機能します。

このような依存関係がある場合、初期化されていないフィールド (NPE など) が原因でテストが失敗することがよくあります。この場合、Eclipseで JUnit プラグインテストとしてテストを実行する必要があります。これらのテストの開始時間を微調整できます

  • Program を Runに変更してアプリケーションを実行する: [No Application] - Headless Mode、および
  • テストを実行するために本当に必要なバンドルのみを選択することによって。これを正しく行うのは非常に複雑になる可能性があるため、OSGi を初めて使用する場合はお勧めしません。

完全な Maven/Tycho ビルドの一部としてテストを実行すると、通常、Eclipse でテストを実行するよりもはるかに遅くなります。個人的には、変更を中央リポジトリにプッシュする前に、出力修飾としてのみこれを行います。

于 2013-04-25T11:55:44.283 に答える