我正在开发一个由几个Eclipse插件组成的Eclipse功能,使用Equinox声明服务(DS)在运行时将插件连接在一起。我想添加集成测试来验证equinox配置。
特别是,我想验证
此外,我想使用Eclipse PDE无头构建(如here和here所述)将此集成测试作为我的持续集成过程的一部分。
我的问题是: 您是否可以推荐任何框架,工具或实践,以便在我确定的约束条件下促进此类集成测试?
到目前为止,我找到了两个线索:
编辑:为了澄清,每个插件都有一个配置了组件定义xml文件的OSGi服务组件。其中一个配置文件中的错误不会破坏任何插件依赖性,并且很容易在运行时被忽视。检测此类故障需要进行集成测试。
编辑2 :到目前为止,我所看到的每件事似乎都证实了Uri的断言(见下文),多插件Eclipse功能未在功能/产品级别进行集成测试。如果我能至少自动验证服务组件是否正确绑定在一起,我愿意不进行全面的集成测试。
我的方法(还没有工作):
In a JUnit test do
For each bundle/plugin of interest
Get the osgi Bundle object with org.eclipse.core.runtime.Platform.getBundle()
Verify that the Bundle is active with Bundle.getState()
Verify that the Bundle is using the expected services with Bundle.getServicesInUse()
Verify that the Bundle has registered the expected services with Bundle.getRegisteredServices()
我正在使用Eclipse Plug-in Test启动配置运行我的代码,启动我的Eclipse产品作为“Run to Run”。测试运行时,我可以验证捆绑包是否处于活动状态,但服务组件未激活,getServicesInUse和getRegisteredServices方法返回null。我从每个捆绑中加载了一个类,以防它是一个懒惰激活问题,但这没有帮助。我还验证了所有服务组件都是“立即”组件,因此一旦它们的软件包被激活就应该激活它们。 为什么Equinox DS没有发挥其魔力?
答案 0 :(得分:2)
我们基于以下方法编写了我们自己的小测试执行框架: a)rcp bundletestcollector(http://rcpquickstart.com/2008/06/12/running-unit-tests-for-rcp-and-osgi-applications/) 这是由Pascal Rapidcault撰写的,他是RCP的主要成员之一。它从正在运行的OSGi环境中的bundle收集测试类。
b)knopflerfish测试框架(http://knopflerfish.org/releases/2.1.1/knopflerfish_osgi_tests_2.1.1.zip) 将测试用例注册为可由测试运行程序执行的服务。还有一个XML输出,遗憾的是它与ant junit XML格式略有不同。
通过这种方式,我们可以执行生活在单独测试包中的集成测试,以及更接近经典单元测试的测试,并将片段存放到测试中的捆绑包中(参见http://rcpquickstart.com/2007/06/20/unit-testing-plug-ins-with-fragments/)。