2016-12-17 16 views
1

eclipseフラグメントの最も一般的な用途の1つは、JUnitテストクラスのコンテナとしてです。しかし、JUnitがEclipseの断片を別の重要な役割を果たすときにテストする方法は?たとえば、プラットフォーム固有のコードがある場合などです。EclipseフラグメントのJUnitテストを作成する正しい方法は何ですか?

問題は、フラグメントのフラグメントを作成することができないということです。また、断片がホスト上で実行時に「マージ」されてもコンパイルされないため、フラグメントをテストするためのホストプラグインのテストを書くことはできません。

答えて

1

私は満足のいく解決方法がわかりませんが、これらの回避策を検討することをお勧めします。

のEclipse-ExtensibleAPI

あなたはそれがフラグメントによってエクスポートされたパッケージは、ホストバンドルで再輸出されるようになり、この

Eclipse-ExtensibleAPI: true 

ようEclipse-ExtensibleAPIマニフェストヘッダを使用することができます。これで、目的のパッケージをインポートするテストバンドルを作成でき、フラグメント内のパブリックタイプにアクセスできるようになりました。

これは、パッケージプライベートタイプとメソッドにアクセスできるクラスローダーと同じクラスローダーを使用して、テストとプロダクションコードの恩恵を受けるテストフラグメントほど近いわけではありません。しかし、少なくとも公的にアクセス可能な方法でテストすることはできます。

ただし、このヘッダーはEclipse拡張であり、OSGi仕様の一部ではありません。したがって、EclipseのOSGi実装であるEquinoxに縛られています。さらに、フラグメントのパッケージはホストバンドルを通じてエクスポートされ、テストバンドルだけでなくすべてのバンドルにも表示されます。

のJavaライブラリ

あなたのフラグメントは、いくつかの依存関係を持っており、あなたがw.r.tテストプレーンJavaライブラリとして扱い検討することもできOSGiの/ Eclipseのランタイムを必要としない場合。別の兄弟Javaプロジェクトにはテストが含まれていて、フラグメントプロジェクトにはプロジェクト依存(のプロパティ> Javaビルドパス>プロジェクト)があります。パッケージプライベートメンバーへのアクセスは機能しません。

Maven/Tychoのようなビルドツールを使用する場合、依存関係を宣言しビルド中にこれらのテストを実行するには、いくつかの追加作業が必要になります。

Bndtools

また、この開発ツールは、Eclipse Plug-in Development Environment (PDE)より良いあなたのニーズに合うかどうかを確認するためにBndtoolsに見ることができます。

プレーンJUnitテストは、プロダクションコードと同じプロジェクトの別のソースフォルダに保持されます。これにより、テストフラグメントが使用されたのと同じ方法で、テストコードが本番コードにアクセスできるようになります。

Bndtoolsは、統合テストの実行もサポートしていますが、断片やコードによって提供されるAPI以外のコードにアクセスすることはできません。

CIビルドの場合、Bndtoolsプロジェクトでは通常、それぞれbndhttp://bnd.bndtools.org/)プラグインを使用してMavenまたはGradleを使用します。 Maven/TychoがPDEプロジェクトを構築してパッケージ化するのと同じように。

BndtoolsはOSGiバンドルを開発するためのIDE拡張であるため、plugin.xmlで宣言された拡張機能などのEclipseプラグインの固有性については認識していません。したがって、これらの成果物の作成者および編集者はいません。しかし、あなたが運が良ければ、PDE Builderを使用して、無効な拡張機能や拡張機能のエラー・マーカーを表示することさえできます。

同じプロジェクトに製造コードとテストコードが含まれているというもう一つの欠点は、JUnitや模擬ライブラリなどの純粋なテストの依存関係も開発時に生産コードで見えるということです。

もちろん、生成された(フラグメント)バンドルには、テストコードもテスト依存も含まれていません。

しかし、Bndtools自体はBndtoolsで開発されています。したがって、Bndtoolsを使用してEclipseプラグインを記述できるという証拠があります。

+0

私は知っていた2番目のオプションを避けようとしました。しかし、私は現在、私はそのヘッダを修正するためにホストプラグインにアクセスすることができないので、これを使用します。 Eclipse-ExtensibleAPIは素晴らしいことです。それについて知らなかった。ありがとうございました!チャンスがあれば、間違いなくそれに移行します。 – bdshadow

+0

別の可能な解決策が私の頭に浮かんだ:Bndtools、編集された答えを見てください。あなたのケースではそれはあまりにも遠いかもしれませんが、私はそれにもかかわらず、完全性のためにそれを追加したいと思います。 –

関連する問題