4

I am currently investigating how best to test our OSGi application intended to run on Apache Karaf. The obvious option is Pax Exam with labs-paxexam-karaf (see http://iocanel.blogspot.com/2012/01/advanced-integration-testing-with-pax.html for a tutorial). However, I am concerned about performance (since Pax Exam apparently starts a new framework for every test method). I've also found that Arquillian has some OSGi support, though that isn't its main focus. JUnit4osgi isn't an option, as it only supports JUnit 3.

For someone unfamiliar with either framework, which is better to start with? What are the tradeoffs?

4

3 に答える 3

3

Reactor Strategiesに基づいて、Pax-Examはすべてのテストメソッドを同じOSGiコンテナーで実行できます。

于 2012-04-18T11:36:50.267 に答える
3

適切な OSGi サポートを求めているのに、なぜ Arquillian を使用するのでしょうか? =)

PaxExam を見るときは、ドキュメントが PaxExam 2 を参照していることを確認してください - v 1 と 2 の間には実質的な違いがあります。

PaxExam を使いこなすにはしばらく時間がかかりますが、その過程で OSGi について多くのことを学ぶことができます (確かに良いことですが、それでも害になる可能性があります)。

@Dmytro の回答と並行して、テスト コンテナーには、junit テストと同じ VM で実行されるネイティブ コンテナーが含まれています。つまり、Eclipse でデバッグを使用して起動できます。これは、org.eclipse.m2e:lifecycle-mapping maven eclipse プラグインと org.ops4j.pax.exam:maven-paxexam-plugin で特にうまく機能します。この方法は素晴らしい、完全な IDE 統合です。

PaxExam のドキュメントは少しまばらですが、いくつかの良い例(対話型シェルを提供する main メソッドを備えたネイティブ ランチャーを参照) とwiki docがあります。行き詰まった場合は、メーリング リストの人々 (general@lists.ops4j.org) が非常に役に立ちます。

もう 1 つの方法は、Karaf の paxexamを調べることです。これは非常に滑らかで、Karaf インスタンスを簡単に起動して実行できます (features.xml など)。

個人的には、PaxExam2 を使用するだけです。これは、フレームワーク プロバイダーに明示的に依存しないことを望んでいるためです (Karaf に対してはまったく問題ありません)。

于 2012-04-19T12:55:04.467 に答える
2

Pax Exam 2.x の EagerSingleStagedReactorFactory (Pax 3.0 では PerClass にエイリアスされています) を使用すると、同じ OSGi コンテナーで特定のクラスのすべてのテスト メソッドを実行できます。

Pax Exam 3.0.0.M1 で導入された PerSuite 戦略では、スイートのすべてのテスト クラスが同じコンテナーで実行されます。

ちなみに、Pax Exam 3.0 は OSGi に加えて Java EE および CDI コンテナをサポートしているため、Arquillian との機能的な類似性はさらに高く、Pax Exam のみが反対側から来ています。

Pax Exam では、ShrinkWrap スタイルでデプロイを組み立てる必要はありません。デプロイはクラスパスから自動的にビルドされます。さらに、共有構成で一連のテスト クラスを実行できます。

于 2012-06-02T20:47:44.247 に答える