4

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

我正在慢慢熟悉 OSGi 的类路径/类加载机制、tycho、Equinox 的工作原理等。

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

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

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

4

1 回答 1

2

只要您的测试不依赖于 OSGi,您就可以像Run as > JUnit Test 一样执行它们在 Eclipse这将在没有 OSGi 运行时的情况下启动测试,但具有正常的类路径,并且所有包都被视为正常的 JAR。只要测试和被测代码不需要来自 OSGi 运行时的任何东西(如捆绑激活、服务等),它就可以工作。

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

  • 通过将程序更改为运行运行应用程序:[无应用程序] - 无头模式,以及
  • 通过只选择那些真正需要运行测试的包。这可能会非常复杂,因此如果您是 OSGi 新手,我不建议您这样做。

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

于 2013-04-25T11:55:44.283 回答