首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用IDE集成在运行的JUnit应用程序中运行OSGi测试

使用IDE集成在运行的JUnit应用程序中运行OSGi测试
EN

Stack Overflow用户
提问于 2018-08-01 02:02:47
回答 2查看 522关注 0票数 1

我祈祷你身体健康。

我正试图找到一种更有效的方法来为OSGi应用程序运行一些测试。如果这个问题已经被问到了,我很抱歉,但是在搜索了一个多小时之后,我在网上的任何地方都找不到这个问题。

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

这种方法的一个次优之处是,启动和停止应用程序存在相当大的开销--几秒钟。如果您只使用一种特定的测试方法,并且测试本身只运行不到一秒,这就特别痛苦了。

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

  1. 如果应用程序测试实例尚未启动,则启动它。
  2. 如果测试包已被更改/重新编译,请将更新的测试包重新安装到正在运行的应用程序中。
  3. 在应用程序中运行测试。
  4. 收集测试结果并在JUnit窗口中报告它们(根据JUnit测试和JUnit插件测试启动程序)。

理想情况下,至少步骤2-4将由测试启动框架作为最低限度的自动化。如果它也能自动为你处理第一步的话,那就是锦上添花了。

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

  • 在运行中的应用程序中手动部署和执行测试插件。这消除了等待应用程序启动的开销,但这是一个高度手工的过程,而且您还失去了标准JUnit启动程序所具有的测试结果的IDE报告。
  • JUnit插件测试启动程序--这很好地报告了IDE中的结果。但是,似乎不可能将其配置为连接到正在运行的应用程序实例--它希望每次运行它时都启动一个新的应用程序。我会非常高兴地发现,我错了,而且JUnit插件测试启动程序实际上可以满足我的要求。
  • 有几个JUnit远程运行程序(例如,https://github.com/ruediste/remote-junithttps://github.com/datastax/remote-junit-runnerhttps://github.com/Tradeshift/junit-remote)使用远程类加载。这看起来是一个很有希望的选择,但我不知道远程类加载和OSGi环境将一起发挥多好。
  • 我可以修改/扩展JUnit插件测试启动程序,以添加连接到现有应用服务器的功能。
  • Apache似乎具有此功能(https://sling.apache.org/documentation/bundles/org-apache-sling-junit-bundles.html),但是它的实现似乎与整个Sling体系结构紧密耦合。由于我正在使用一个已经有自己的容器/webservice体系结构的预先存在的应用程序,我不确定我是否能够修改它以使用Sling,而且我也不确定Sling是否能很好地与其他web/servlet框架一起使用。
  • 顽固/嘲弄/假装以避免对全面应用程序的需求是我广泛研究的一个选项,也是我更喜欢的选择。但是,该应用程序广泛使用了自定义RDBMS持久性体系结构,该体系结构与偶尔的原始SQL调用混合使用。模拟不足以产生有用的测试,尽管我可以想象出一个足够精确的假的,但它会和应用程序的持久性引擎本身一样复杂(从定义上来说也不那么准确),所以简单地使用内置的持久性体系结构似乎更有意义。

所以我已经排除了几个选择,剩下的我有几个,我可以用足够的时间和精力去工作。然而,在承诺这段时间和努力之前,我想在这里提出这个问题,希望我能避免任何死胡同或重新发明车轮。

任何帮助/建议/信息都很感激。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-06-13 11:34:16

作为一个更新:

这篇文章背后的想法是我研究Bnd/Bndtools组合(https://bnd.bndtools.org/)的催化剂。它还不支持开箱即用,但它的Github存储库中存在一些未解决的问题,并且有一个带有工作原型的叉子。看起来,这个特性可能会进入下一个版本(4.3),希望很快就能发布。

更新1:这个特性并没有进入Bndtools的4.3版本,但现在它作为包biz.aQute.tester.junit-platform成为4.4开发快照的一部分。文档可在这里获得:https://bnd.bndtools.org/chapters/310-testing.html

更新2: Bndtools的4.4开发快照变为5.0,并于2020年1月发布。

票数 0
EN

Stack Overflow用户

发布于 2018-08-15 17:23:26

我的公司为我们的一个应用程序在Eclipse中使用JUnit插件测试,我们面临的问题是启动和停止Eclipse应用程序需要很长时间。我不知道有什么事情能做你想要做的事情--我们只是生活在局限之中。

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51624405

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档