【问题标题】:What is the right way to create JUnit tests for Eclipse fragments?为 Eclipse 片段创建 JUnit 测试的正确方法是什么?
【发布时间】:2017-05-02 21:12:36
【问题描述】:

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

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

【问题讨论】:

    标签: eclipse junit eclipse-plugin eclipse-rcp


    【解决方案1】:

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

    Eclipse-ExtensibleAPI

    你可以像这样使用Eclipse-ExtensibleAPI清单头

    Eclipse-ExtensibleAPI: true
    

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

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

    但是请注意,此标头特定于 Eclipse PDE,而不是 OSGi 规范的一部分。因此,您与此开发环境相关联。此外,片段的包将通过其宿主包导出,并且不仅对测试包可见,对所有包都可见。

    Java 库

    如果您的片段几乎没有依赖项并且不需要 OSGi/Eclipse 运行时,您可以考虑将其视为纯 Java 库并进行测试。另一个同级 Java 项目可能包含测试,并且在片段项目上具有项目依赖性(Properties > Java Build Path > Projects)。同样,无法访问包私有成员。

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

    Bndtools

    您还可以查看Bndtools,看看这个开发工具是否比 Eclipse Plug-in Development Environment (PDE) 更适合您的需求。

    Plain 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插件。

    【讨论】:

    • 我尽量避免使用我知道的第二种选择。但是,我将使用这个,因为目前我无权访问主机插件来修改其标题。 Eclipse-ExtensibleAPI 是一个很棒的东西。不知道。谢谢!如果有机会,肯定会迁移到它。
    • 我想到了另一种可能的解决方案:Bndtools,请参阅编辑后的答案。尽管在您的情况下可能过于牵强,但为了完整起见,我还是想添加它。
    • 根据 Neil Bartlett on this answer 的评论,Eclipse-ExtensibleAPI 是“PDE 使用的纯工具头文件,而不是 Eclipse 或 OSGi 运行时头文件”。因此,如果您使用它,则不应与 Equinox 绑定,而应与 Eclipse PDE 绑定。
    • @kapex 谢谢你的提示。我已经相应地改变了答案。
    猜你喜欢
    • 2020-09-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-09
    相关资源
    最近更新 更多