【问题标题】:How to efficiently JUnit test Eclipse RCP Plugins如何有效地 JUnit 测试 Eclipse RCP 插件
【发布时间】:2017-06-20 20:09:37
【问题描述】:

我们有一个相当大的 Eclipse RCP 应用程序,但不确定如何正确测试它的插件。

  • 对于每个插件,都有一个包含单元测试的测试片段。
  • 对于不需要运行 RCP 平台的小型测试,我们只需调用“标准”JUnit 测试运行程序。

  • 对于需要 RCP 平台的测试,可以使用 JUnit 插件测试运行程序对其进行测试。

  • 对于 JUnit 插件测试,可以定义在 RCP 平台启动时加载哪些插件。

  • 问题:运行 JUnit 插件测试需要花费大量时间(对于简单的 JUnit 测试来说是几秒而不是毫秒)和资源,因为需要启动 RCP 平台和所有插件。

  • 问题:如何有效地最小化为测试运行的插件? 我有哪些选项可以最大限度地减少对 RCP 平台的依赖(例如首选项服务和扩展点)? 是否有一些模拟库或至少一些模拟 RCP 平台服务的最佳实践?

现在我无法想象用 JUnit 插件测试运行器做一些像样的 TDD,执行这些测试需要太长时间。

非常欢迎有关该主题的任何建议和经验!

【问题讨论】:

    标签: junit tdd eclipse-rcp


    【解决方案1】:

    我能感觉到你的痛苦:插件测试很糟糕!而且我也没有找到完全令人满意的解决方案。

    虽然您可能会获得一些(毫秒?)秒,因为您将所需的插件减少到绝对最小值,但我发现这是不切实际的,因为您的依赖关系图的更改通常还需要调整启动配置。如果您的(共享)启动配置中有平台相关的片段(即 SWT),情况会变得更糟。我通常会退回到所有工作区并启用目标插件选项,并没有看到启动速度有显着差异。

    我不知道 RCP 平台的模拟库。

    除了非常简单的情况外,我会避免模拟平台的某些部分,因为您很容易弄错行为。另见这篇文章:https://stackoverflow.com/a/31938571/2986905

    我的做法是尽可能将平台依赖项排除在我的应用程序代码之外,以便我可以编写简单的 JUnit 测试。平台 API 上的自定义抽象可以帮助重复使用案例。

    此外,可以在不运行工作台的情况下使用数量惊人的平台 API,例如所有 SWT 和 JFace API、首选项……因此,再次编写具有最小依赖性的小而简单的类有助于保持远离插件测试。例如,将视图的内容与 IViewPart(或它的 e4 等效项)分开允许编写测试而不需要视图和运行的工作台实例(如果我说的很明显,请原谅)。

    【讨论】:

    • 不错的答案。提醒 Robert Martin 的其中一本书中的一个核心建议:尽可能编写 POJO,以便您可以正确地对其逻辑进行单元测试
    • 感谢您的贡献!我同意,我试图尽可能让平台远离一切。不幸的是,我不是唯一一个编写代码的人;)应用程序模型、平台和首选项/ UI 的封装对于许多类来说并不真正存在。重构以优化可测试性是危险的,因为代码没有经过适当的测试;)从经验来看,它们有时会产生奇怪的副作用并破坏事情..
    【解决方案2】:

    如果您将默认配置更改为“无头模式”,插件测试的运行速度会明显加快,这也将防止在测试期间弹出烦人的 Eclipse 窗口。

    【讨论】:

      猜你喜欢
      • 2014-02-26
      • 2010-10-31
      • 1970-01-01
      • 1970-01-01
      • 2011-08-17
      • 1970-01-01
      • 1970-01-01
      • 2012-10-06
      • 2014-12-27
      相关资源
      最近更新 更多