Eclipse特征集成测试的最佳实践

时间:2009-02-11 22:02:38

标签: eclipse osgi integration-testing eclipse-pde

我正在开发一个由几个Eclipse插件组成的Eclipse功能,使用Equinox声明服务(DS)在运行时将插件连接在一起。我想添加集成测试来验证equinox配置。

特别是,我想验证

  • 服务组件按预期绑定在一起
  • 激活捆绑包
  • 插件按预期共享信息(参见编辑2

此外,我想使用Eclipse PDE无头构建(如herehere所述)将此集成测试作为我的持续集成过程的一部分。

我的问题是: 您是否可以推荐任何框架,工具或实践,以便在我确定的约束条件下促进此类集成测试?

到目前为止,我找到了两个线索:

  • Spring Dynamic Modules包含OSGi集成测试框架。但是,我无法在Eclipse中运行简单的Spring DM测试。它抱怨“平台已经在运行”。
  • Pax Exam(原Pax Drone)是另一个OSGi集成测试框架。

编辑:为了澄清,每个插件都有一个配置了组件定义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没有发挥其魔力?

1 个答案:

答案 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/)。