为什么运行Java测试时BundleContext为null?

时间:2013-08-21 14:20:01

标签: java service osgi osgi-bundle

我写了一个测试,我运行一个需要加载osgi服务的类。 当我开始测试时,我每次都会得到一个NullPointerException。 运行应用程序时,它工作正常。 我的捆绑上下文为空。我该如何解决这个问题? 这是应该加载服务的类的行:

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

A Bundle for the specified bundle class or null if the specified class was not defined by a bundle class loader.

我在FrameworkUtil API中找到了解释,但我仍然不知道该怎么做。

2 个答案:

答案 0 :(得分:4)

FrameworkUtil.getBundle(Class)仅在OSGi包类加载器加载类时才有效,即在运行OSGi Framework时。

可能你的JUnit测试是在没有OSGi Framework的普通JVM中运行的。因此,没有可用的BundleContext。

如果您需要测试捆绑包与OSGi的交互,那么您需要在OSGi中实际运行测试!否则,将业务代码与特定于OSGi的粘合代码隔离,然后在普通的JUnit环境中测试业务代码。实现此隔离的一种好方法是使用Declarative Services。

答案 1 :(得分:-2)

当我以SWTBotTest开始我的测试时,我已经解决了这个问题。

感谢您的帮助。