eclipse片段最常见的用途之一是作为JUnit测试类的容器。但是,当它扮演另一个更重要的角色时,如何为Eclipse片段编写JUnit测试?例如,当它具有特定于平台的代码时。
问题在于无法为片段创建片段。而且你不能为主机插件编写测试来测试片段,因为它甚至不能编译,因为片段只在运行时“合并”到主机中。
答案 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项目通常在相应的bnd
(http://bnd.bndtools.org/)插件的帮助下使用Maven或Gradle。正如Maven / Tycho用于构建和打包PDE项目一样。
由于Bndtools是开发OSGi包的IDE扩展,因此它不了解Eclipse插件的特性,例如plugin.xml
中声明的扩展。因此,这些工件没有构建器和编辑器。但如果幸运的话,您甚至可以使用PDE构建器显示无效扩展和扩展点的错误标记。
在同一个项目中使用生产代码和测试代码所带来的另一个缺点是,在开发时,生产代码也可以看到JUnit,模拟库等纯测试依赖项。
当然,生成的(片段)包既不包含测试代码也不包含测试依赖项。
但是,Bndtools本身是用Bndtools开发的。因此有证据表明Bndtools可用于编写Eclipse插件。