我正在寻找测试一组eclipse插件的可能性,而不必为每个经过测试的插件使用单个bundle.目前我有一个运行Eclipse产品的PDE版本(大约70个插件,功能和产品).所有插件的所有单元测试都包含在一个普通java项目中,具有对所有插件的Eclipse项目引用,以便能够实例化类并运行测试.由于普通java项目错过了所有目标平台项目,因此我将PDE构建转换为maven tycho时,此设置不再有效.我没有执行真正的OSGI插件测试,但是有些测试要求在类路径中包含IProgressMonitor等核心eclipse类,因为我在自己的方法签名中也使用了这些eclipse运行时接口.
在成功设置新的maven tycho构建之后,我尝试了一些可能性让测试再次运行:
1)将plain-java测试项目转换为插件测试项目
缺点:
- 为了能够在内部包中测试类,我必须使用x-friend:notation导出每个包,并且必须为每个包重复此过程新的测试包
2)在每个插件中添加第二个源文件夹并将测试移动到相应的插件中
缺点:
- Tycho似乎使用build.properties来包含编译步骤所需的源文件夹.由于src/main/java和src/test/java都需要注册为源文件夹,因此真实类和测试类在target/classes输出文件夹中混合,最后包含在插件的JAR文件中.我没有找到一种方法来配置tycho以使用src/main/java作为sourceDirectory和src/test/java作为testSourceDirectory.
- Tycho只执行单元测试,如果包类型是"eclipse-test-plugin"
- Sonar似乎不认识以这种方式执行的测试(我没有花很多时间试图解决这个问题,也许有一个这方面的简单解决方案)
3)将必要的eclipse目标平台插件作为普通的maven依赖添加到plain-java测试项目中
缺点:
- 目标平台信息被复制,一次在目标平台中用于tycho构建,一次在maven依赖列表中测试项目(使用普通的maven-surefire执行)
- 目标平台包在工件中部署两次,一次作为目标平台p2存档,一次作为maven依赖项(插件+ POM)
4)为每个插件添加一个测试片段(这似乎是通常选择的可能性)
缺点:
- 需要付出巨大努力(> 70个插件,> 4500个单元测试),所以我需要添加大约70个新片段并拆分所有测试.
目前,可能性3)对我来说似乎最合理......有什么建议吗?otherideas?