16

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

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

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

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

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

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

4

14 回答 14

12

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

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

于 2011-09-17T17:37:06.513 回答
7

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

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

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

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

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

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

于 2011-11-14T21:55:20.687 回答
6

Spring Dynamic Modules 对测试 OSGi 包有很好的支持。

于 2008-09-16T16:15:11.253 回答
6

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

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

干杯,托尼

于 2008-09-30T09:33:04.077 回答
3

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

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

于 2008-09-21T20:44:59.650 回答
1

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

于 2008-09-22T04:43:47.423 回答
1

条约是一个非常学术的合同(测试)框架,但有一些不错的想法。有一些论文发表在上面,人们目前正在努力改进它。

于 2008-11-03T22:57:21.987 回答
1

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

于 2012-05-21T14:01:34.990 回答
1

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

于 2012-06-01T08:32:19.050 回答
1

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

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

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

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

于 2012-10-14T20:40:04.600 回答
0

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

于 2012-10-09T17:58:19.600 回答
0

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

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

于 2019-08-27T10:37:07.237 回答
0

与其他人一起提到 mockito 非常方便地模拟插件依赖项(参考等)。见https://www.baeldung.com/mockito-annotations

于 2021-03-16T08:39:43.970 回答
-1

bnd-testing-maven-plugin 怎么样?

它允许在 Felix 或 Equinox 等正在运行的容器中运行 JUnit。如果您将 BNDTools 用于 Eclipse,这非常相似,但只是没有 Eclipse 且没有 UI 的 maven。

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

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

https://github.com/effectiveosgi

于 2018-08-08T20:04:31.883 回答