tdd – 如何使用Equinox / OSGi – Tycho – Eclipse RCP环境来测试第一种方法

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

我慢慢熟悉OSGi的classpath / classloading机制,tycho,equinox如何工作等等.

我正在使用模拟来编写简单的单元测试,通过在测试包中收集它们(这是目标包的片段)但是我遇到ClassNotFound错误,附加源代码的问题.我已经看到过诸如将测试作为rcp插件测试运行或在集成测试范围内使用tycho的建议.但是我发现所有这些方法都很慢,无法进行测试并且适得其反.

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

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

最佳答案 只要您的测试不依赖于OSGi,就可以像Run一样执行它们> Eclipse中的JUnit测试.这将在没有OSGi运行时的情况下启动测试,但具有正常的类路径,并且所有bundle都被视为普通JAR.只要测试和测试代码不需要OSGi运行时中的任何内容(如bundle激活,服务等),这就可以工作.

如果存在这种依赖性,则测试通常会由于未初始化的字段而失败,例如,与NPEs.在这种情况下,您需要在Eclipse中以JUnit插件测试的形式运行测试.您可以调整这些测试的启动时间

>通过将程序更改为运行以运行应用程序:[无应用程序] – 无头模式,和
>仅选择运行测试所需的那些捆绑包.这样做可能会非常复杂,所以如果您是OSGi的新手,我不建议这样做.

将测试作为完整Maven / Tycho构建的一部分运行通常比在Eclipse中运行测试慢得多.就个人而言,在将更改推送到中央存储库之前,我只将其作为输出限定.

点赞