【问题标题】:Eclipse Tycho: Testing plug-in's without using single test-bundlesEclipse Tycho:在不使用单个测试包的情况下测试插件
【发布时间】:2013-12-13 17:05:10
【问题描述】:

我正在寻找测试一组 eclipse 插件的可能性,而不必为每个被测试的插件使用一个包。目前我有一个为 Eclipse 产品运行的 PDE 构建(大约 70 个插件、特性和一个产品)。所有插件的所有单元测试都包含在一个纯 java 项目中,具有对所有插件的 Eclipse 项目引用,以便能够实例化类并运行测试。当我将 PDE 构建转换为 maven tycho 时,此设置不再有效,因为普通的 java 项目错过了所有目标平台项目。我没有执行真正的 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目标平台插件作为plain-maven依赖添加到plain-java测试项目中
缺点:
- 目标平台信息重复,一次在 tycho 构建的目标平台中,一次在测试项目的 maven 依赖列表中(使用普通 maven-surefire 执行)
- 目标平台包在工件中部署了两次,一次作为目标平台 p2 存档,一次作为 maven 依赖项(插件+POM)

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

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

【问题讨论】:

  • 只是另一个想法:您也可以将 70 个包合并在一起......但是如果有充分的理由将生产代码分成多个包,那么将测试分开可能也有意义。我不明白为什么应该单独对待测试(迁移工作除外)。
  • 将测试项目拆分为单个捆绑包显然是有意义的,但这需要数周的工作,而我们没有(也没有得到报酬)。我们决定使用方法 3,但遇到其他问题,我更新了上面的问题。建议?
  • Paolo,很高兴您用您的发现更新您的帖子,但您应该将您的解决方案放入答案中。 stackoverflow 明确允许回答您自己的问题。

标签: java eclipse unit-testing maven tycho


【解决方案1】:

最后我们使用了方法 3

不幸的是,除了提到的目标平台 jar 的缺点之外,我们还发现我们需要添加每个第三方依赖项两次。例如,apache-commons-math 依赖项必须在生产插件 A 中添加一次(lib 文件夹中的 jar,并在清单中作为 bundle-classpath 引用),并在测试项目 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。

有什么建议吗?

【讨论】:

    猜你喜欢
    • 2013-09-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-09
    • 2017-12-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多