OSGi测试

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

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

目前,我必须使用Maven构建捆绑包,然后执行测试工具。 我正在寻找像Eclipse的JUnit测试运行器这样的东西,因为它会节省我一大堆时间。

有没有快速简便的方法来测试OSGi包?

编辑:我不需要测试Eclipse插件或GUI组件,只需要测试OSGi包。

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

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

这是OPS4J目前与测试相关的工作。

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

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

干杯,托尼

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

  • 我正在使用Tycho ,这是一个使用Maven构建Eclipse插件的工具。 如果您在自己的插件或插件片段中创建测试,Tycho可以在其自己的OSGi实例中运行每组测试,并具有所有必需的依赖项。 介绍和进一步的信息 。 这对我来说非常有效。

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

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

  • 另一种选择是unit testing中启动OSGi容器的实例,直接运行,如此处所述。

  • 这是一个写了一个小包测试收集器的人 ,它搜索JUnit(3)测试并运行它们。

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

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

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

条约是一个合同(测试)框架,相当学术,但有一些很好的想法。 有发表在其上的论文,以及正在努力改进它的人。

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

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

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

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

使用这些工具,您可以执行TDD并使写入的测试始终在maven集成阶段内运行。 建议使用带有m2e和maven-bundle-plugin的eclipse,因为在这种情况下,只要在源代码中保存一个类就可以重新生成target / classes / META-INF / MANIFEST.MF,这样就可以拖动项目并删除到部署者窗口。 您开发的OSGi包不必具有任何特殊function(例如作为eclipse插件或其他东西)。

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

在过去的几年里, Tycho–一个基于Maven的OSGi构建系统 – 在Eclipse Foundation中变得相当受欢迎。 该框架还包括使用Maven Surefire在单独的测试平台中测试OSGi包的方法…

bnd-testing-maven-plugin怎么样?

它允许在像Felix或Equinox这样的运行容器中运行JUnit。 如果您使用BNDTools进行eclipse,这非常相似,但只需要map withpout eclipse并且没有UI。

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

另请参阅maven的effectiveosgi原型。 这将为您提供构建项目或添加测试的良好起点。

https://github.com/effectiveosgi