为Eclipse片段创建JUnit测试的正确方法是什么?

时间:2016-12-17 03:34:37

标签: eclipse junit eclipse-plugin eclipse-rcp

eclipse片段最常见的用途之一是作为JUnit测试类的容器。但是,当它扮演另一个更重要的角色时,如何为Eclipse片段编写JUnit测试?例如,当它具有特定于平台的代码时。

问题在于无法为片段创建片段。而且你不能为主机插件编写测试来测试片段,因为它甚至不能编译,因为片段只在运行时“合并”到主机中。

1 个答案:

答案 0 :(得分:2)

我不知道一个令人满意的解决方案,但是,您可能需要考虑这些解决方法。

<强> Eclipse的ExtensibleAPI

您可以像这样使用Eclipse-ExtensibleAPI清单标题

Eclipse-ExtensibleAPI: true

它会导致片段导出的包由主机包重新导出。现在,您可以创建一个测试包,用于导入所需的包,因此可以访问片段中的公共类型。

这并不像测试片段那么接近,你可以使用相同的类加载器从测试和生产代码中获益,这些类加载器可以访问包私有类型和方法。但你至少可以通过可公开访问的手段进行测试。

但请注意,此标头特定于Eclipse PDE,而不是OSGi规范的一部分。因此,您将与此开发环境联系在一起。此外,片段的包将通过其主机包导出,不仅可以显示测试包,还可以显示所有包。

Java Library

如果您的片段具有很少的依赖关系并且不需要OSGi / Eclipse运行时,您可以考虑将其视为纯Java库w.r.t测试。另一个兄弟Java项目可以包含测试,并在片段项目上具有项目依赖性(属性&gt; Java构建路径&gt;项目)。再次,访问包私有成员将无法正常工作。

如果您使用像Maven / Tycho这样的构建工具,则需要一些额外的工作来声明依赖项并在构建期间执行这些测试。

<强> Bndtools

您还可以查看Bndtools以了解此开发工具是否比Eclipse Plug-in Development Environment (PDE)更符合您的需求。

普通JUnit测试保存在与生产代码相同的项目中的单独源文件夹中。这将使您的测试代码以与使用测试片段相同的方式访问生产代码。

Bndtools还支持执行集成测试,但我怀疑除了通过片段提供的服务或其他API之外,您还可以访问片段代码。

对于CI构建,Bndtools项目通常在相应的bndhttp://bnd.bndtools.org/)插件的帮助下使用Maven或Gradle。正如Maven / Tycho用于构建和打包PDE项目一样。

由于Bndtools是开发OSGi包的IDE扩展,因此它不了解Eclipse插件的特性,例如plugin.xml中声明的扩展。因此,这些工件没有构建器和编辑器。但如果幸运的话,您甚至可以使用PDE构建器显示无效扩展和扩展点的错误标记。

在同一个项目中使用生产代码和测试代码所带来的另一个缺点是,在开发时,生产代码也可以看到JUnit,模拟库等纯测试依赖项。

当然,生成的(片段)包既不包含测试代码也不包含测试依赖项。

但是,Bndtools本身是用Bndtools开发的。因此有证据表明Bndtools可用于编写Eclipse插件。