关于java:OSGi测试

关于java:OSGi测试

OSGi Testing

目前,作为大学最后一年项目的一部分,我正在开发一个新的版本控制系统。 这个想法是使其具有高度的适应性和可插拔性。

我们正在使用OSGi框架(Equinox实现)来管理我们的插件。 我的问题是我找不到用于测试OSGi捆绑包的简单易用的方法。

当前,我必须使用Maven构建捆绑软件,然后执行测试工具。 我正在寻找类似Eclipse的JUnit测试运行程序之类的东西,因为它可以节省大量时间。

有没有一种快速简便的方法来测试OSGi捆绑软件?

编辑:我不需要测试Eclipse插件或GUI组件,仅需要OSGi捆绑包即可。

EDIT2:是否有一些支持JUnit4的框架?


最近,您应该看看Pax考试:
http://team.ops4j.org/wiki/display/paxexam/Pax+Exam

这是OPS4J当前与测试有关的工作。


以下是一些尚未提及的工具:

  • 我使用的是Tycho,这是使用Maven构建Eclipse插件的工具。如果您在自己的插件或插件片段中创建测试,则Tycho可以在其自己的OSGi实例中运行所有测试集,并具有所有必需的依赖性。介绍和更多信息。这对我来说很好。

  • jUnit4OSGI看起来很简单。您创建OSGiTestCase的子类,并获得诸如getServiceReference()之类的方法。

  • Pluginbuilder是用于OSGi捆绑软件/ Eclipse插件的无头构建系统,具有一个名为Autotestsuite的测试运行框架。在构建步骤之后,它将在OSGi环境的上下文中运行测试。但是,它似乎并没有保持几年。我认为许多Eclipse项目正在从Pluginbuilder迁移到Tycho。

  • 另一种选择是在单元测试中启动OSGi容器的实例,您可以直接运行它,如此处所述。

  • 这是写小型捆绑测试收集器的人,该收集器搜索JUnit(3)测试并运行它们。


在OPS4J(ops4j.org)上有一个专用的开源OSGi测试框架,称为Pax Drone。

您可能想看看Pax Drone([http://wiki.ops4j.org/confluence/x/KABo]),它使您可以在测试中使用所有的Felix版本以及Equinox和Knopflerfish。

干杯,
托尼


Spring Dynamic Modules对测试OSGi捆绑包提供了出色的支持。


Eclipse具有启动配置类型,可用于在Eclipse(即OSGi)应用程序的上下文中运行JUnit测试:

http://help.eclipse.org/stable/index.jsp?topic=/org.eclipse.pde.doc.user/guide/tools/launchers/junit_launcher.htm


我认为我们遇到了同样的问题,并制定了自己的解决方案。解决方案有不同部分:

  • 一个junit4runner,它捕获具有定义的特殊属性的所有OSGi服务。它使用JUnit4引擎运行这些捕获的服务。 JUnit批注应放置在服务实现的接口中。
  • 一个启动OSGi框架(可以将定制框架创建为maven依赖项)并在集成测试maven生命周期内运行单元测试的maven插件。
  • 部署程序OSGi捆绑包。如果将其放入OSGi容器中,将打开一个简单的始终在最上面的窗口,您可以在其中放置项目文件夹(从总指挥官或日食中)。然后将重新部署该捆绑包。

使用这些工具,您可以执行TDD,并且书面测试也始终在maven集成阶段内运行。建议将eclipse与m2e和maven-bundle-plugin一起使用,因为在这种情况下,只要在源中保存类,就会重新生成target / classes / META-INF / MANIFEST.MF。到部署程序窗口。您开发的OSGi捆绑包不必具有任何特殊功能(例如,作为eclipse插件之类的东西)。

整个解决方案是OpenSource。您可以在http://cookbook.everit.org上找到教程。


ProSyst测试执行环境是OSGi捆绑软件的有用测试工具。它还支持JUnit测试作为可能的测试模型之一。


对于单元测试,请使用EasyMock框架或为测试所需的接口创建自己的实现。


条约是一个合同(测试)框架,虽然学术性强,但也有一些不错的主意。有论文发表在此上,并且人们正在努力对其进行改进。


如果您需要测试GUI组件,我发现SWTBot可以完成工作。


我想有很多方法可以测试OSGi组件。测试的一种方法是使用Robot Framework。我所做的是使用Robot Framework进行测试,并在OSGi中安装了远程库,或者使它们通过套接字与OSGi-test组件进行通信,而Robot将与这些模块进行通信并通过它们运行测试。

因此,基本上,您的OSGi模块应该具有执行某些操作并产生某些输出的接口。因此,在我的设置中,我有一个测试组件,可以对实际的OSGi组件进行服务调用,然后会有一个侦听服务,可以捕获事件/服务调用(由被测模块进行),并且这些结果可以被机器人问到。因此,基本上,通过这种方式,您可以将大型系统拆分为多个小组件,并使该系统在生产/生产环境(如环境)中运行,并在组件级别上对其进行自动测试,或者对某些实际组件进行统一测试。


在过去的几年中,Tycho(一种用于OSGi的基于Maven的新构建系统)在Eclipse Foundation中变得相当流行。该框架还包括使用Maven Surefire在单独的测试床上测试OSGi捆绑软件的方法...


bnd-testing-maven-plugin怎么样?

它允许在诸如Felix或Equinox之类的运行容器中运行JUnit。
如果您将BNDTools用于eclipse,则非常相似,但是仅使用带pout eclipse且没有UI的maven。

https://github.com/bndtools/bnd/tree/master/maven/bnd-testing-maven-plugin

还可以查看Maven的有效原型。这将为您构建项目或添加测试提供一个良好的起点。

https://github.com/effectiveosgi


推荐阅读