10

Equinox Declarative Services (DS) を使用して実行時にプラグインを結び付け、いくつかの Eclipse プラグインで構成される Eclipse 機能を開発しています。分点構成を検証するための統合テストを追加したいと思います。

特に確認したいのは、

  • サービス コンポーネントは期待どおりに結合します
  • バンドルがアクティブ化されます
  • プラグインは期待どおりに情報を共有します(編集 2を参照)

さらに、この統合テストを、Eclipse PDE ヘッドレス ビルドを使用した継続的統合プロセスの一部にしたいと考えています (ここここで説明されているように)。

私の質問は次のとおりです。私が特定した制約内でこのタイプの統合テストを容易にするフレームワーク、ツール、またはプラクティスをお勧めできますか?

これまでに 2 つのリードを見つけました。

  • Spring Dynamic Modulesには、OSGi 統合テスト用のフレームワークが含まれています。ただし、簡単な Spring DM テストを Eclipse 内で実行することはできませんでした。「プラットフォームは既に実行されています」と不平を言います。
  • Pax Exam (以前の Pax Drone) は、もう 1 つの OSGi 統合テスト フレームワークです。

編集:明確にするために、各プラグインには、コンポーネント定義xmlファイルで構成されたOSGiサービスコンポーネントがあります。これらの構成ファイルの 1 つに誤りがあっても、プラグインの依存関係が壊れることはなく、実行時まで簡単に気付かれない可能性があります。このような障害を検出するには、統合テストが必要です。

編集 2 : これまでのところ、マルチプラグイン Eclipse 機能は機能/製品レベルで統合テストされていないという Uri の主張 (以下を参照) を確認するために、私が見たものはすべて確認しているようです。サービス コンポーネントが正しくバインドされていることを少なくとも自動的に確認できるのであれば、包括的な統合テストを実行しなくてもかまいません。

私のアプローチ(まだ機能していません):


In a JUnit test do
   For each bundle/plugin of interest
      Get the osgi Bundle object with org.eclipse.core.runtime.Platform.getBundle()
      Verify that the Bundle is active with Bundle.getState()
      Verify that the Bundle is using the expected services with Bundle.getServicesInUse()
      Verify that the Bundle has registered the expected services with Bundle.getRegisteredServices()

Eclipse Plug-in Test 起動構成を使用してコードを実行し、Eclipse 製品を「実行するプログラム」として起動しています。テストを実行すると、バンドルがアクティブであることを確認できますが、サービス コンポーネントはアクティブにならず、getServicesInUse メソッドと getRegisteredServices メソッドは null を返します。遅延アクティベーションの問題である場合に備えて、各バンドルからクラスをロードしましたが、それは役に立ちませんでした。また、すべてのサービス コンポーネントが「即時」コンポーネントであることも確認したため、バンドルがアクティブ化されたらすぐにアクティブ化する必要があります。 Equinox DS がその魔法を発揮しないのはなぜですか?

4

1 に答える 1

2

アプローチの組み合わせに基づいて、独自の小さなテスト実行フレームワークを作成しました。 / ) これは、主要な RCP 担当者の 1 人である Pascal Rapidcault によって書かれました。実行中の OSGi 環境でバンドルからテスト クラスを収集します。

b) knopflerfish テスト フレームワーク ( http://knopflerfish.org/releases/2.1.1/knopflerfish_osgi_tests_2.1.1.zip ) テスト ケースを、テスト ランナーが実行できるサービスとして登録します。XML 出力もありますが、残念ながら ant junit XML 形式とは少し異なります。

このようにして、個別のテスト バンドルに含まれる統合テストと、従来の単体テストに近く、テスト対象のバンドルにフラグメント化されたテストを実行できます ( http://rcpquickstart.com/2007/06/20/unit-を参照)。 testing-plug-ins-with-fragments/ )。

于 2009-05-18T05:27:17.377 に答える