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

标签 eclipse junit eclipse-plugin eclipse-rcp

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

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

最佳答案

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

Eclipse-ExtensibleAPI

您可以像这样使用 Eclipse-ExtensibleAPI list header

Eclipse-ExtensibleAPI: true

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

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

但是请注意,此 header 特定于 Eclipse PDE,而不是 OSGi 规范的一部分。因此,您被绑定(bind)到这个开发环境。此外,片段的包将通过其主机包导出,并且不仅对测试包可见,而且对所有包可见。

Java 库

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

如果您使用像 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插件。

关于eclipse - 为 Eclipse 片段创建 JUnit 测试的正确方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41195127/

相关文章:

node.js - 如何向我的 Ionic 应用程序项目添加 Android 支持?

java - 在 Eclipse 中执行 "sudo java"时扫描器失败

java - Eclipse 中的异常断点 - 如何检查异常对象?

java - 我如何让我的 Spring-JUnit 测试认为它在 GenericApplicationContext 中运行?

java - JUnit 插件测试忽略 Eclipse Neon 中的目标平台

javascript - eclipse (juno) 中的 javascript 代码出现 java 警告 (?)

java - 如何为自定义 Spring Batch Reader 编写 junit

java - 在 Java EE 中测试 Singleton 时出现 NullPointerException

eclipse-plugin - 开发 Eclipse RCP 应用程序

java - Braintree 与 Android Eclipse 项目的集成