运行 JUnit 在具有 IDE 集成的 运行 OSGi 应用程序中进行测试

Running JUnit tests inside a running OSGi application with IDE integration

祝你一切安好

我正在尝试找到一种更有效的方法来 运行 对 OSGi 应用程序进行一些测试。如果已经有人问过这个问题,我深表歉意,但经过一个小时左右的搜索,我无法在 SO 或网络上的任何地方找到这个问题。

目前,我正在使用 JUnit 和 Eclipse PDE 的内置 JUnit 插件测试启动器。它工作得相当好——它使用所有指定的包(包括测试包)和 OSGi 框架内的 运行s JUnit 测试启动完整的 OSGi 应用程序。结果在 IDE 中报告,就像标准的 JUnit 测试启动器一样,这很好,因为您不仅可以看到失败消息是什么而无需浏览日志,您还可以双击任何测试失败,它将带您直接到包含失败断言的代码行。有助于非常高效的测试驱动开发。

这种方法不是最佳的一件事是在启动和停止应用程序时有相当多的开销 - 几秒钟。如果您只使用一种特定的测试方法并且测试本身花费不到一秒的时间 运行.

,这将尤其痛苦

我认为一个理想的解决方案是 Eclipse 中的 JUnit 启动器,它可以连接到已经 运行ning 的 OSGi 应用程序并在其中执行测试。如果启动器还可以在 运行ning 测试之前自动将测试包重新部署到 运行ning 应用程序,那就太好了。理想情况下,程序如下:

  1. 如果尚未启动应用程序测试实例,请启动它。
  2. 如果测试包已 changed/recompiled,请将更新后的测试包重新安装到 运行ning 应用程序中。
  3. 运行 应用程序中的测试。
  4. 收集测试结果并在 JUnit window 中报告(根据 JUnit 测试和 JUnit 插件测试启动器)。

理想情况下,测试启动框架至少会自动执行第 2-4 步。如果它还可以自动为您处理第 1 步,那就锦上添花了。

我还没有找到任何可以满足所有这些条件的选项。我考虑过:

所以我有几个我已经排除的选项,在剩下的选项中,我有几个我可能可以通过足够的时间和精力来工作。然而,在投入这段时间和精力之前,我想在这里提出这个问题,希望我能避免任何死胡同或重新发明轮子。

任何help/suggestions/info赞赏。

我的公司在我们的一个应用程序中使用 Eclipse 中的 JUnit 插件测试,我们面临同样的问题,即启动和停止 Eclipse 应用程序需要很长时间。我不知道有什么东西可以满足您的需求 - 我们只是忍受了这些限制。

对于同样在 Eclipse 中运行的第二个项目,我们决定避免 JUnit 插件测试,更多地依赖模拟,同时根据需要引入一些 Eclipse 库。在这种情况下,我们不 运行 在 OSGI 的上下文中,而是作为一个更孤立的单元测试,依赖于模拟。

一点更新:

这个 post 背后的想法是我研究 Bnd/Bndtools 组合 (https://bnd.bndtools.org/) 的催化剂。它 out-of-the-box 还不支持它,但是它的 Github 存储库中有几个未解决的问题,并且有一个带有工作原型的分支。看起来这个功能可能会进入下一个版本 (4.3),希望很快就会出现。

更新 1:此功能并未包含在 Bndtools 的 4.3 版本中,但它现在作为捆绑包成为 4.4 开发快照的一部分 biz.aQute.tester .junit-platform。此处提供文档:https://bnd.bndtools.org/chapters/310-testing.html

更新2:Bndtools 4.4开发快照升级为5.0,2020年1月发布