如何有效地JUnit测试Eclipse RCP插件

时间:2017-06-20 20:09:37

标签: junit tdd eclipse-rcp

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

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

enter image description here

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

enter image description here

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

enter image description here enter image description here

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

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

现在我无法想象使用JUnit插件测试运行器做一些体面的TDD,执行这些测试只需要很长时间。

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

2 个答案:

答案 0 :(得分:4)

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

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

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

除了非常简单的情况外,我不会嘲笑平台的某些部分,因为你很容易弄错行为。另请参阅此帖子:https://stackoverflow.com/a/31938571/2986905

我的做法是尽可能地保持平台依赖性不受我的应用程序代码的影响,这样我就可以编写简单的JUnit测试。平台API上的自定义抽象可以帮助重复用例。

此外,可以在没有工作台运行的情况下使用大量平台API,例如,当然,所有SWT和JFace API,首选项......因此,编写具有最小依赖性的小型简单类有助于保持远离插件测试。例如,将视图的内容与IViewPart(或其等效的e4)分开允许编写测试而不需要视图,反过来又是一个正在运行的工作台实例(如果我说的是明显的话,请原谅)。

答案 1 :(得分:1)

如果将默认配置更改为“无头模式”,则插件测试的运行速度将显着提高,这还将防止在测试过程中弹出烦人的Eclipse窗口。

enter image description here