gpt4 book ai didi

tdd - 如何使用 Equinox/OSGi - Tycho - Eclipse RCP 环境遵循测试优先方法

转载 作者:行者123 更新时间:2023-12-01 01:51:17 26 4
gpt4 key购买 nike

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

我慢慢熟悉了 OSGi 的类路径/类加载机制,tycho、equinox 的工作原理等。

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

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

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

最佳答案

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

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

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

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

    关于tdd - 如何使用 Equinox/OSGi - Tycho - Eclipse RCP 环境遵循测试优先方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16166866/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com