关于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


推荐阅读

    linux命令没执行完?

    linux命令没执行完?,系统,设备,工具,情况,密码,状态,电脑,管理,材料,服务,Lin

    linux打包项目命令?

    linux打包项目命令?,项目,文件,命令,软件,数字,系统,名称,工具,目录,格式,Lin

    linux项目更新命令行?

    linux项目更新命令行?,工作,地址,系统,数据,信息,项目,标准,电脑,目录,命令,l

    linux打印命令执行?

    linux打印命令执行?,信息,系统,工具,服务,命令,发行,基础,位置,设备,时间,怎

    linux执行两次命令?

    linux执行两次命令?,系统,信息,连续,名称,命令,初级,首页,工具,管理,终端,lin

    linux命令执行安装?

    linux命令执行安装?,软件,系统,管理,网站,官网,市场,中心,最新,灵活,工作,如

    linux执行一条新命令?

    linux执行一条新命令?,系统,工作,命令,管理,网络,服务,信息,目录,路径,脚本,L

    监控linux执行命令?

    监控linux执行命令?,系统,情况,数据,实时,网络,信息,状态,时间,设备,命令,如

    linux命令卡死不执行?

    linux命令卡死不执行?,系统,设备,数据,密码,工具,情况,软件,环境,分析,命令,l

    linux执行c程序命令?

    linux执行c程序命令?,系统,工作,工具,信息,代码,命令,文件,保险,管理,环境,li

    linux命令执行中断?

    linux命令执行中断?,设备,系统,网络,工具,工作,通用,状态,名字,流程,进程,lin

    执行linux脚本命令行?

    执行linux脚本命令行?,工具,位置,地方,环境,数据,状态,暂停,增长,系统,基础,

    linux远端执行命令?

    linux远端执行命令?,系统,状态,软件,名称,密码,暂停,网络,环境,认证,在线,如

    linux命令行执行成功?

    linux命令行执行成功?,系统,信息,状态,服务,管理,百度,设计,灵活,代码,命令,L

    安卓执行linux命令行?

    安卓执行linux命令行?,系统,设备,基础,发展,标准,情况,信息,电话,号码,工具,

    c执行在linux命令?

    c执行在linux命令?,系统,环境,保险,工具,代码,命令,程序,文件,终端,语言,如何

    linux执行中退出命令?

    linux执行中退出命令?,档案,状态,命令,分析,数据,电脑,实时,系统,工具,编辑,l

    linux授权命令执行?

    linux授权命令执行?,系统,工作,数字,权限,文件,概念,标准,命令,目录,用户,在L

    linux定时执行命令?

    linux定时执行命令?,时间,系统,服务,任务,工作,标准,情况,周期性,工具,命令,l

    如何在linux执行命令?

    如何在linux执行命令?,单位,电脑,命令,系统,基础,发行,工具,工作,信息,文件,m