0

osgi サービスをロードする必要があるクラスを実行するテストを作成しました。テストを開始すると、毎回 NullPointerException が発生します。アプリケーションを実行すると、正常に動作します。バンドル コンテキストが null です。どうすれば問題を解決できますか? これは、サービスをロードするクラスの行です。

BundleContext ctx = getBundle(this.getClass()).getBundleContext();
deviceCfgModel = getService(ctx, IDeviceCfgModel.class);

指定されたバンドル クラスの Bundle。指定されたクラスがバンドル クラス ローダーによって定義されていない場合は null。

APIでその説明を見つけましたが、FrameworkUtilどうすればよいかまだわかりません。

4

2 に答える 2

4

FrameworkUtil.getBundle(Class)クラスが OSGi バンドルのクラスローダーによってロードされた場合、つまり OSGi フレームワークを実行している場合にのみ機能します。

おそらく、JUnit テストは、OSGi フレームワークのないプレーンな JVM で実行されています。したがって、利用可能な BundleContext はありません。

バンドルと OSGi との相互作用をテストする必要がある場合は、実際に OSGi 内でテストを実行する必要があります。それ以外の場合は、OSGi 固有のグルー コードからビジネス コードを分離し、プレーンな JUnit 環境でビジネス コードをテストします。この分離を実現する良い方法は、Declarative Services を使用することです。

于 2013-08-21T17:02:21.610 に答える
-2

テストを SWTBotTest として開始すると、問題が解決しました。

ご協力いただきありがとうございます。

于 2013-08-22T08:08:09.523 に答える