Eclipse 插件 + TDD?

Eclipse plugin + TDD?

如何在开发Eclipse插件的同时进行TDD? 由于 PDE 是一种清单优先的方法,因此没有 'test scoped dependency' 这样的东西。

我是否应该另外做一个基于 maven 的项目?并直接在它的构建路径中添加插件项目? (因为插件项目不是基于 maven 的,所以它不会在 .m2 中)。这似乎不是一个很好的设置...

我在某处读到插件片段可以完成这项工作,但我必须手动将 Mockito or EasyMock 添加到自定义存储库?或者将它包含在该片段内的类路径中?这似乎不太便携。

我正在习惯 Bndtools,但它适合 eclipse 插件吗?

此外,我通常使用 Infinitest and MoreUnits,我想如果测试位于第二个项目中,后者将不起作用?

最后,我刚刚阅读了有关 Eclipse Tycho 的内容,这是一组 maven 插件 构建 eclipse 插件,它是否是一个合适的选择,即使它在孵化器中?

多年来,我们已经在多个项目中使用了测试片段,发现它是最实用的方法。

因为该片段与其主机包共享相同的 class 加载器,您的测试可以访问内部包和包私有方法,就像没有 OSGi 容器一样。

片段甚至可以有一个 fragment.xml 如果需要,您可以在其中贡献扩展以进行测试。

测试驱动插件开发中最烦人的部分是 PDE 测试 本身。一旦您的测试代码要求 workbench 为 运行ning,测试执行速度就会急剧下降。 PDE 测试启动 Eclipse workbench 以在其中执行测试。

因此,我们努力尽可能地将我们的代码与 workbench 代码隔离开来。这允许我们尽可能编写 'fast' 纯 JUnit 测试,并且仅在绝对必要时才求助于 PDE 测试。两个测试可能位于同一个片段中,并由一个 maning 模式区分。

需要通过目标平台提供测试依赖项(JUnit、模拟库、匹配器库等)(以及其他非测试依赖项)。虽然混合这些依赖项可能看起来很奇怪,但我们在实践中没有遇到任何问题。

MoreUnit 非常适合此设置。它可以配置(每个项目)以在特定源文件夹中查找 test/production 代码 classes,即使它们位于不同的项目中。

Infinitest 可能不太适合执行 PDE 测试,只是因为它们的执行速度较慢,而 Infinitests 是经常执行快速测试。但是,如果可以排除 PDE 测试,您仍然可以将其用于普通 JUnit 测试。

对于 示例Eclipse Extras 项目应用了所描述的技术 - 如果您有兴趣,可以探索资源以了解它们在实践中的工作原理。

如果您从头开始,Bndtools 当然值得考虑。我听说 Bndtools 开发人员使用 Bndtools 来构建 Bndtools。 AFAIK Bndtools 不支持像 plugin.xml 这样的插件工件的编辑支持。但也许您可以使用 PDE 插件编辑器和 Bndtools 来编辑扩展和扩展点。

在典型的 Bndtools 项目中,您的生产代码和测试代码位于同一项目内的不同源文件夹中,这与 Maven 项目非常相似。 但是,test 源文件夹未包含在生成的包中。

在同一个项目中拥有生产和测试代码的缺点是测试依赖性从生产代码中可见。这是因为两个源文件夹共享相同的 class 路径容器。

Tycho 尽管它处于孵化器状态,​​但它是一个很好的工具,可以测试和构建各种 Eclipse 工件,如插件、特性、目标平台和产品。与上述设置一起,我们在 CI 服务器上使用 Tycho 来构建,运行 测试 最后为我们的插件项目打包 p2 存储库。

关于该主题的更多资源: