我正在寻找测试一组eclipse插件的可能性,而不必为每个经过测试的插件使用单个bundle。目前我有一个运行Eclipse产品的PDE版本(大约70个插件,功能和产品)。所有插件的所有单元测试都包含在一个普通java项目中,具有对所有插件的Eclipse项目引用,以便能够实例化类并运行测试。由于普通java项目错过了所有目标平台项目,因此我将PDE构建转换为maven tycho时,此设置不再有效。我没有执行真正的OSGI插件测试,但是有些测试要求在类路径中包含IProgressMonitor等核心eclipse类,因为我在自己的方法签名中也使用了这些eclipse运行时接口。
在成功设置新的maven tycho构建之后,我尝试了一些可能性让测试再次运行:
1)将plain-java测试项目转换为插件测试项目
缺点:
- 为了能够在内部包中测试类,我必须使用x-friend导出每个包:表示法,并且必须为每个新的测试包重复此过程
2)在每个插件中添加第二个源文件夹并将测试移动到相应的插件中
缺点:
- Tycho似乎使用build.properties来包含编译步骤所需的源文件夹。由于src / main / java和src / test / java都需要注册为源文件夹,因此真实类和测试类在target / classes输出文件夹中混合,最后包含在插件的JAR文件中。我没有找到一种方法来配置tycho以使用src / main / java作为sourceDirectory和src / test / java作为testSourceDirectory。
- 如果包类型为“eclipse-test-plugin”,则Tycho仅执行单元测试
- 声纳似乎没有认识到以这种方式执行的测试(我没有花很多时间来解决这个问题,也许这方面有一个简单的解决方案)
3)将必要的eclipse目标平台插件作为普通的maven依赖项添加到plain-java测试项目中
缺点:
- 目标平台信息重复,一次在tycho构建的目标平台中,一次在测试项目的maven依赖项列表中(使用普通maven-surefire执行)
- 目标平台捆绑包在工件中部署两次,一次作为目标平台p2归档,一次作为maven依赖项(插件+ POM)
4)为每个插件添加一个测试片段(这似乎是通常选择的可能性)
缺点:
- 需要付出巨大的努力(> 70个插件,> 4500个单元测试),所以我需要添加大约70个新片段并拆分所有测试。
目前,可能性3)对我来说似乎最合理......有什么建议吗? otherideas?
答案 0 :(得分:1)
最后我们使用了方法3
不幸的是,除了上面提到的关于目标平台jar的缺点之外,我们还发现我们需要两次添加每个第三方依赖项。例如,apache-commons-math依赖项必须在高效插件A(lib文件夹中的jar,并在manifest中作为bundle-classpath引用)中添加一次,并在test-project POM中作为maven依赖项添加一次。我们没有找到其他方法来进行测试项目编译。基本上,测试项目没有识别Eclipse插件A中包含的jar文件,因为它是Eclipse依赖项而不是Maven项。但另一方面,如果我在插件A中添加库作为Maven依赖项并从lib文件夹中删除jar,则Eclipse IDE无法编译项目,因为库缺失(Maven依赖项未通过M2E,如果项目有package-type eclipse-plugin。)
我们的设置现在看起来像这样(简化):
父POM
Eclipse插件A,包类型eclipse-plugin,[lib文件夹中的apache-commons-math,添加到Manifest Bundle-ClassPath]
Eclipse插件B,包类型eclipse-plugin
测试项目,包类型jar,POM中的Maven依赖关系到插件A和B以及Maven对apache-commons-math的依赖性。
有什么建议吗?