代码之家  ›  专栏  ›  技术社区  ›  fluffels

OSGi测试

  •  16
  • fluffels  · 技术社区  · 18 年前

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

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

    目前,我必须使用Maven构建包,然后执行测试工具。我正在寻找类似Eclipse的JUnit测试运行器,因为它将为我节省大量时间。

    是否有一种快速简单的方法来测试OSGi捆绑包?

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

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

    12 回复  |  直到 18 年前
        1
  •  12
  •   Luca Geretti    15 年前

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

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

        2
  •  7
  •   rescdsk    14 年前

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

    • 我在用 Tycho ,这是一个使用Maven构建Eclipse插件的工具。如果你在自己的插件或插件片段中创建测试,Tycho可以在自己的OSGi实例中运行每组测试,以及所有必需的依赖关系。 Intro 和 further info 这对我来说很有效。

    • jUnit4OSGI 看起来很简单。你创建OSGiTestCase的子类,得到的方法如下 getServiceReference() 等等。

    • Pluginbuilder ,一个用于OSGi捆绑包/Eclipse插件的无头构建系统,具有 a test-running framework 叫做 自动测试套件 在构建步骤之后,它在OSGi环境的上下文中运行测试。但是,它似乎已经维持了好几年了。我认为许多Eclipse项目正在从Pluginbuilder迁移到Tycho。

    • 另一种选择是启动一个实例 OSGi容器 在内部 你的单元测试 ,如前所述,您可以直接运行 here .

    • 这是一个写信的人 一个小的 bundle test collector ,它搜索JUnit(3)测试并运行它们。

        3
  •  6
  •   flicken    18 年前

    Spring动态模块对 testing OSGi bundles .

        4
  •  6
  •   Toni Menzel    18 年前

    OPS4J(OPS4J.org)上有一个专用的开源OSGi测试框架,名为 帕克斯无人机 .

    你可能想看看帕克斯无人机([ http://wiki.ops4j.org/confluence/x/KABo] )这使您能够在测试中使用所有Felix版本以及Equinox和Knopflerfish。

    干杯, 托尼

        5
  •  3
  •   Rafael Chaves    18 年前

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

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

        6
  •  1
  •   David Green David Green    18 年前

    如果你需要测试我找到的GUI组件 SWTBot 完成工作。

        7
  •  1
  •   user33790    17 年前

    Treaty 是一个相当学术性的合约(测试)框架,但有一些不错的想法。已经发表了一些关于它的论文,以及目前正在努力改进它的人。

        8
  •  1
  •   pooh    14 年前

    这个 ProSyst Test Execution Environment 是OSGi捆绑包的有用测试工具。它还支持JUnit测试作为可能的测试模型之一。

        9
  •  1
  •   Chris Gerken    13 年前

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

        10
  •  1
  •   Balazs Zsoldos    12 年前

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

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

    使用这些工具,您可以进行TDD,并使编写的测试始终在maven集成阶段运行。建议将eclipse与m2e和maven捆绑插件一起使用,就像在这种情况下使用target/classes/META-INF/MANIFEST一样。在源代码中保存类后,MF会立即重新生成,以便您可以拖动项目并将其放入部署程序窗口。您开发的OSGi捆绑包不必有任何特殊功能(比如作为eclipse插件或其他东西)。

    整个解决方案是开源的。您可以在以下网址找到教程 http://cookbook.everit.org

        11
  •  0
  •   Tonny Madsen    14 年前

    在过去的几年里 Tycho -一个新的基于Maven的OSGi构建系统在Eclipse基金会中变得相当流行。该框架还包括使用Maven Surefire在单独的测试台上测试OSGi包的方法。..

        12
  •  0
  •   user11621303 user11621303    7 年前

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

    所以,基本上你的OSGi模块应该有一些接口来做一些事情并产生一些输出。因此,在我的设置中,我有一个测试组件,可以对实际的OSGi组件进行服务调用,然后有一个监听服务,可以捕获事件/服务调用(由被测模块发出),机器人可以询问这些结果。所以基本上,你可以用这种方式将一个庞大的系统拆分为小组件,让系统在生产/类似生产的环境中运行,并在组件级别自动测试,或者统一测试一些真实的组件。

        13
  •  0
  •   haltunbay    5 年前

    与其他提到的一样,mockito对于模拟插件依赖关系(引用等)非常方便。看见 https://www.baeldung.com/mockito-annotations

        14
  •  -1
  •   Gadi    8 年前

    bnd测试maven插件怎么样?

    它允许在Felix或Equinox等运行容器中运行JUnit。 如果你使用BNDTools进行eclipse,这非常相似,但只是maven,没有eclipse,也没有UI。

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

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

    https://github.com/effectiveosgi