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