当前位置: 首页 > 知识库问答 >
问题:

如何在Equinox/OSGI-Tycho-Eclipse RCP环境中遵循测试优先的方法

汪晟睿
2023-03-14

我加入了一个在Eclipse RCP平台上使用Equinox/OSGi,Tycho进行开发的项目。

我正在慢慢熟悉OSGi的类路径/类加载机制,第谷、分等的工作原理。

我使用mocking编写普通的单元测试,将它们收集到测试包(目标包的片段)中,但是我遇到了ClassNotFound错误,以及附加源代码的问题。我已经看到了一些建议,比如将测试作为rcp插件测试运行,或者在集成测试范围内使用tycho运行。然而,我发现所有这些方法对于运行测试来说都非常缓慢,并且适得其反。

据我所知,这个环境中的依赖解析机制(Tycho、Eclipse RCP或两者)与我的假设有点不同。当我向主机包添加新的实现以满足测试时,除非我为主机包运行mvn install(tycho正在接管),否则测试包不会接收所有新的实现。有时,由于缺少依赖项,这需要完全安装项目。我尝试的另一种方法是以JUnit-plugin测试的形式运行测试。由于tycho的依赖解析,该方法也相当慢,而且它正在加载所有的bundle。

我想知道运行单元测试的最佳方法是什么?(当我说单元测试时,我指的是单元测试的真正定义,其中交互被模拟,测试以毫秒为单位运行)。

共有1个答案

云骏奇
2023-03-14

只要您的测试不依赖于OSGi,就可以像在Eclipse中使用Run As>JUnit Test一样执行它们。这将在没有OSGi运行时的情况下启动测试,但使用一个普通的类路径,所有bundle都被视为普通的jar。只要测试和被测代码不需要OSGi运行时的任何东西,比如包激活、服务等,就可以工作。

如果存在这种依赖关系,测试通常会由于未初始化的字段而失败,例如使用NPES。在本例中,您需要在Eclipse中以JUnit插件测试的形式运行这些测试。您可以调整这些测试的启动时间

  • 通过将程序更改为运行以运行应用程序:[无应用程序]-无头模式,和
  • 只选择运行测试真正需要的包。这可能非常复杂,所以如果您是OSGi新手,我不建议您这样做。
 类似资料:
  • 我一直在硒IDE中测试。它很容易使用,我已经用它创建了一些测试用例。我一直在搜索谷歌,试图找到一种自动重复测试的方法。我见过一个使用gotolabel、while循环等的解决方案,但我无法使它们中的任何一个工作。有人能告诉我如何循环测试<code>n

  • 我正在研究一种算法,在该算法中,我希望在从该优先级队列中删除元素时,保持优先级队列中具有相同优先级的元素的FIFO顺序。 虽然,我已经看到了将自动递增的序列号作为辅助键的解决方案,并使用它来打破联系,但我需要类似的链接,但我面临的问题是,我想要比较的元素-TestItemChange(下面示例中的类)没有实现Compariable,我无法(也不想)修改它以使其实现。所以现在,在优先级队列中没有FI

  • 我试图构建一个使用嵌入式OrientDB(当前为“Memory:”)图形数据库的应用程序。我用的是OrientDB2.2 orientdb-graphdb不应该依赖于一个合适的包,或者包括并导出类吗?

  • 有时候你会遇到循环,或者递归函数,它们会花费很长的执行时间,可能是你的产品的瓶颈。在你尝试使循环变得快一点之前,花几分钟考虑是否有可能把它整个移除掉,有没有一个不同的算法?你可以在计算时做一些其他的事情吗?如果你不能找到一个方法去绕开它,你可以优化这个循环了。这是很简单的,move stuff out。最后,这不仅需要智慧而且需要理解每一种语句和表达式的开销。这里是一些建议: 删除浮点运算操作。

  • 我想在与PRODUCTION域相同的范围内构建一个Lotus Notes TEST环境,并从PRODUCTION环境中获得names.nsf的单向副本。您有逐步参考的说明或指南吗?非常感谢。

  • 问题1:- 我正在做一个大量使用OSGi的项目。我是OSGi新手。在我的项目中,我看到了equinox和knopflerfish/and或knopflerfish束的罐子。 问题2:- 我如何在Equinox和Knoplerfish中确定OSGI在我的项目中使用哪个容器?我假设OSGI不能同时使用这两个容器。 问题3:- 这个链接提到Equinox框架需要来实现OSGI核心。那么这是否意味着它不需