多年来,我们已经在多个项目中使用测试片段,发现它是最实用的方法。
由于片段与其宿主包共享相同的类加载器,您的测试可以访问内部包和包私有方法,就像没有 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 存储库。
关于该主题的更多资源: