0

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

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 环境中测试业务代码。实现这种隔离的一个好方法是使用声明式服务。

于 2013-08-21T17:02:21.610 回答
-2

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

谢谢你的帮助。

于 2013-08-22T08:08:09.523 回答