java - eclipse 第谷 : Testing plug-in's without using single test-bundles

标签 java eclipse unit-testing maven tycho

我正在寻找测试一组 eclipse 插件的可能性,而不必为每个被测试的插件使用一个包。目前我有一个为 Eclipse 产品运行的 PDE 构建(大约 70 个插件、特性和一个产品)。所有插件的所有单元测试都包含在一个纯 java 项目中,具有对所有插件的 Eclipse 项目引用,以便能够实例化类并运行测试。当我将 PDE 构建转换为 Maven tycho 时,此设置不再有效,因为纯 Java 项目缺少所有目标平台项目。我没有执行真正的 OSGI 插件测试,但有些测试需要在类路径中包含 IProgressMonitor 等核心 eclipse 类,因为我也在自己的方法签名中使用这些 eclipse 运行时接口(interface)。

成功设置新的 maven tycho build 后,我尝试了几种可能的方式让测试再次运行:

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目标平台插件作为plain-maven依赖添加到plain-java测试项目
缺点:
- 目标平台信息被复制,一次在tycho构建的目标平台中,一次在测试项目的maven依赖列表中(使用plain maven-surefire执行)
- 目标平台包在 Artifact 中部署两次,一次作为目标平台 p2 存档,一次作为 Maven 依赖项(插件+POM)

4) 为每个插件添加一个测试片段(这似乎是通常选择的可能性)
缺点:
- 需要付出巨大的努力(> 70 个插件,> 4500 个单元测试),所以我需要添加大约 70 个新片段并拆分所有测试。

目前,可能性 3) 对我来说似乎是最合理的……有什么建议吗?其他想法?

最佳答案

最后我们使用方法3

不幸的是,除了提到的有关目标平台 jar 的缺点之外,我们还发现我们需要将每个第三方依赖项添加两次。例如,apache-commons-math 依赖项必须在生产插件 A(lib 文件夹中的 jar,并在 list 中作为 bundle-classpath 引用)中添加一次,并且在测试项目 POM 中作为 maven 依赖项添加一次。我们没有找到其他方法来编译测试项目。基本上,测试项目无法识别 Eclipse 插件 A 中包含的 jar 文件,因为它是 Eclipse 依赖项而不是 Maven 依赖项。但另一方面,如果我在插件 A 中将库添加为 Maven 依赖项并从 lib 文件夹中删除 jar,则 Eclipse IDE 无法编译项目,因为缺少库(Maven 依赖项未通过解决M2E,如果项目有包类型的 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。

有什么建议吗?

关于java - eclipse 第谷 : Testing plug-in's without using single test-bundles,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20252922/

相关文章:

java - 条码扫描仪始终读取 UPC-E

java - 建立新的 Java 开发商店

Eclipse C++ 格式化程序在方法标识符之前放置新行

Java 小程序 "HORIZONTAL"无法解析或不是字段

unit-testing - 什么时候在开发工作流程中进行单元测试?

java - Spring MVC : Unit testing a controller with MockMultipartFIle and other form data

Java - 注册所有用@MyAnnotation 注释的类

java - 无法生成某个范围内的所有卡普雷卡数

java - jpod 库在 eclipse 之外不工作

ios - 如何在单元测试中调用 web 服务作为 uiviewcontroller 的一部分?