【问题标题】:Where should I put testcode for an Eclipse plugin fragment?我应该将 Eclipse 插件片段的测试代码放在哪里?
【发布时间】:2014-02-23 13:27:03
【问题描述】:
在搜索 Eclipse 插件测试代码的最佳实践时,我发现了几篇文章。他们中的大多数建议像this这样的片段
我有一个单一来源的插件,它有两个片段,一个用于 RCP,一个用于 RAP。
现在,如果我创建另一个片段进行测试,我无法从测试片段访问 RCP 片段 API。
有一个标头Eclipse-ExtensibleAPI,如果设置为true,主机插件将使其片段API可用。但它可用于其他需要它的插件,而不是它自己的片段(测试片段)。
谁能帮我解决这个问题?
【问题讨论】:
标签:
unit-testing
eclipse-plugin
single-source
eclipse-fragment
【解决方案1】:
这个问题是 Eclipse 约定将测试放在单独的项目中的结果。这种分离的目的是从主项目中排除 JUnit、模拟框架等测试依赖项。然而,这种推理是基于越来越过时的假设。如果您既不使用 PDE 构建也不使用插件测试,您可以考虑将测试移到包含源代码的同一个项目中。
我认为单元测试属于项目的源代码,不应该分开。每个签出源代码的人也应该进行测试。
PDE 构建
Eclipse 插件项目过去使用PDE build 构建,它从 Manifest 文件中读取依赖项,无法区分测试范围和编译范围的依赖项。虽然 PDE 构建仍然在 IDE 中用于导出,但在包括平台本身在内的大多数 Eclipse 项目中,它已被 tycho 取代。 Tycho 基于 Maven,它允许测试范围的依赖项不会最终进入构建的工件。
如果将测试移到主项目中,可以将测试依赖项添加到项目构建路径中,或者查看是否可以使用m2e 来管理依赖项。
插件测试
导致测试分离的另一个假设是所有测试都作为所谓的插件测试执行。插件测试需要一个运行的 OSGi 环境,它们可以被认为是比单元测试更多的集成测试。这些测试不需要访问片段的内部,而是使用环境中可用的片段来测试主机包的功能。
普通单元测试不需要 OSGi 环境,因此它们无论如何都使用相同的类加载器,因此不需要保存在片段中。如果使用 tycho 构建,则必须使用 maven-surefire 而不是 tycho-surefire,因为后者将测试作为插件测试执行。