【问题标题】:Eclipse plugin + TDD?Eclipse 插件 + TDD?
【发布时间】:2015-06-23 16:34:53
【问题描述】:

在开发 Eclipse 插件时如何做 TDD? 由于PDE 是一种清单优先的方法,因此不存在“测试范围依赖”之类的东西。

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

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

我已经习惯了Bndtools,但它适合 eclipse 插件吗?

另外,我通常使用InfinitestMoreUnits,如果测试位于第二个项目中,我猜后者将无法工作?

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

【问题讨论】:

    标签: java maven eclipse-plugin tdd osgi


    【解决方案1】:

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

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

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

    测试驱动插件开发中最烦人的部分是PDE 测试 本身。一旦您的被测代码需要工作台运行,测试执行就会大大减慢。 PDE 测试启动 Eclipse 工作台以在其中执行测试。

    因此,我们努力尽可能地将我们的代码与工作台代码隔离开来。这使我们可以尽可能编写“快速”的纯 JUnit 测试,并且仅在绝对必要时才使用 PDE 测试。两个测试都可能驻留在同一个片段中,并且可以通过maning 模式来区分。

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

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

    Infinitest 可能不太适合执行 PDE 测试,只是因为它们的执行速度很慢,而 Infinitest 就是要频繁地执行快速测试。但是如果可以排除 PDE 测试,您仍然可以将它用于普通的 JUnit 测试。

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

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

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

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

    Tycho 尽管处于孵化器状态,​​但它仍然是测试和构建各种 Eclipse 工件(如插件、功能、目标平台和产品)的好工具。连同上述设置,我们在 CI 服务器上使用 Tycho 来构建、运行测试 最后为我们的插件项目打包 p2 存储库。

    关于该主题的更多资源:

    【讨论】:

    • 作为首席开发人员,我可以确认我们确实使用 Bndtools 来开发 Bndtools 并且它有效。不幸的是,我们必须手动编辑plugin.xml。 plugin.xml 的 PDE 编辑器在用于非 PDE 项目时会引发 NPE :-(
    • 我刚刚注意到,当您创建一个新的 Bndtools 项目时,已经有一个 /test 源文件夹,它没有包含在最终的 jar 中。很遗憾 PDE 也不支持这一点。我想我会手动编辑我的 plugin.xml 并坚持使用 Bndtools,这无论如何都要好得多。谢谢!
    • 尽管 Neil 说了这么多,您可能想尝试一下 PDE 插件编辑器。我能够在一个简单的 Bndtools 项目中编辑 plugin.xml。虽然不确定这会导致多远。
    • @NeilBartlett 抱歉,这是几个月前的事了,但我的项目才真正到达了 Eclipse 插件部分。我克隆了 bndtools,刚刚在工作区的 /cnf 文件夹中看到了您使用的 Eclipse 存储库。哇!我只是没有找到任何关于在 /cnf 文件夹中添加自定义存储库的文档。我正在使用 enRoute,现在这看起来很棒,但是我在 jpm4j 存储库中找不到我需要的所有 eclipse 库,想知道构建该配置的正确方法是什么?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-10-10
    • 1970-01-01
    • 2010-12-10
    • 2013-05-15
    • 2011-06-20
    相关资源
    最近更新 更多