我们有一个相当大的Eclipse RCP应用程序,并且不确定如何正确测试它的插件。
问题:运行JUnit插件测试需要花费大量时间(简单JUnit测试的秒数而不是毫秒)和资源,因为RCP平台和所有插件都需要启动。 / p>
问题:如何有效地最小化为测试运行的插件? 我有什么选择来最小化我对RCP平台的依赖性(例如首选项服务和扩展点)? 是否有一些Mocking库或至少一些模拟RCP平台服务的最佳实践?
现在我无法想象使用JUnit插件测试运行器做一些体面的TDD,执行这些测试只需要很长时间。
非常欢迎有关该主题的任何建议和经验!
答案 0 :(得分:4)
我能感受到你的痛苦:插件测试很糟糕!而且我还没有找到一个完全令人满意的解决方案。
虽然您可能会获得一些(毫秒),因为您将所需的插件减少到绝对最小值,但我发现它不切实际,因为依赖关系图中的更改通常也需要调整启动配置。如果您的(共享)启动配置中有平台相关片段(即SWT),则会变得更糟。我通常会回到所有工作区并启用目标插件选项,并且没有看到启动速度的显着差异。
我不知道RCP平台的模拟库。
除了非常简单的情况外,我不会嘲笑平台的某些部分,因为你很容易弄错行为。另请参阅此帖子:https://stackoverflow.com/a/31938571/2986905
我的做法是尽可能地保持平台依赖性不受我的应用程序代码的影响,这样我就可以编写简单的JUnit测试。平台API上的自定义抽象可以帮助重复用例。
此外,可以在没有工作台运行的情况下使用大量平台API,例如,当然,所有SWT和JFace API,首选项......因此,编写具有最小依赖性的小型简单类有助于保持远离插件测试。例如,将视图的内容与IViewPart(或其等效的e4)分开允许编写测试而不需要视图,反过来又是一个正在运行的工作台实例(如果我说的是明显的话,请原谅)。
答案 1 :(得分:1)