我写了一个测试,我运行一个需要加载osgi服务的类。 当我开始测试时,我每次都会得到一个NullPointerException。 运行应用程序时,它工作正常。 我的捆绑上下文为空。我该如何解决这个问题? 这是应该加载服务的类的行:
BundleContext ctx = getBundle(this.getClass()).getBundleContext();
deviceCfgModel = getService(ctx, IDeviceCfgModel.class);
我在FrameworkUtil
API中找到了解释,但我仍然不知道该怎么做。
答案 0 :(得分:4)
FrameworkUtil.getBundle(Class)
仅在OSGi包类加载器加载类时才有效,即在运行OSGi Framework时。
可能你的JUnit测试是在没有OSGi Framework的普通JVM中运行的。因此,没有可用的BundleContext。
如果您需要测试捆绑包与OSGi的交互,那么您需要在OSGi中实际运行测试!否则,将业务代码与特定于OSGi的粘合代码隔离,然后在普通的JUnit环境中测试业务代码。实现此隔离的一种好方法是使用Declarative Services。
答案 1 :(得分:-2)
当我以SWTBotTest开始我的测试时,我已经解决了这个问题。
感谢您的帮助。