【问题标题】:Adding test-only dependencies for non-OSGi JUnit test in a Tycho project在 Tycho 项目中为非 OSGi JUnit 测试添加仅测试依赖项
【发布时间】:2016-02-06 08:09:02
【问题描述】:

我有几个使用 Eclipse Tycho 构建的 OSGi 捆绑包。所有代码依赖项都以清单优先方式进行管理。

现在我想开发一些纯 JUnit-Tests 来测试包内部的功能。这些测试不需要 OSGi 容器即可执行,但它们确实需要 Mockito。

由于 Mockito 显然只在运行此非 OSGi 测试时才需要,而不是在包本身的执行期间,因此将依赖项添加到 MANIFEST.MF 文件感觉是错误的。

我目前的方法是添加一个包含 mockito.jar 的项目/lib 文件夹,并手动将此 jar 添加到他的类路径中。这适用于本地 Eclipse 执行,目前还可以。

问题是,每个同事也需要将 jar 添加到类路径中,因为 .classpath 文件显然没有被签入。另外,我猜最终执行测试时会出现问题,例如由于缺少类路径条目而在构建服务器上。

所以我的问题是:如何将依赖项添加到 Mockito 以使每个同事都毫不费力地工作,并且不会在包执行期间造成任何问题?

我可以将它作为可选依赖项添加到 MANIFEST.MF 文件中,但如上所述,感觉这不是正确的解决方案。

我可以将 mockito 依赖添加为正常的 pom-first 依赖,范围为 test 还是会导致与正常的 manifest-first 方法发生冲突?

我还找到了maven-eclipse-plugin,它提供了classpathContainers 配置选项,但我没有找到类似的选项来将库添加到类路径。

测试位于包本身的 src/test/java 文件夹中。

考虑到我在技术上不需要 Tycho 来执行这些测试,向使用 eclipse Tycho 构建的项目添加仅测试依赖项的最佳方法是什么?

【问题讨论】:

    标签: java eclipse maven tycho


    【解决方案1】:

    如果您可以使用完全仅由 Maven 依赖项(例如 Mockito)组成的类路径运行测试,您还可以为这些测试创建一个带有 jar 打包的模块。在该模块中,您还可以将依赖项添加到包中,然后将其用作普通 JAR。

    在这种情况下,您需要解决传递依赖关系。 jar 项目随后将由 Maven 解析,并且 Maven 不知道 OSGi 包的 Manifest 依赖项。但根据您要测试的确切性质,这可能仍然有效。

    【讨论】:

      【解决方案2】:

      通常,您会在一个单独的包中看到测试,它有自己的清单和依赖项。这不是标准的 Maven 结构,但它更适合 OSGi 包的结构。

      例如,查看JDT-core git repository,您会看到单独的测试包。请注意,测试包有一个特殊的 packaging-typeeclipse-test-plugin

      【讨论】:

      • 我们为需要 OSGi 容器和多个捆绑包才能执行的集成测试执行此操作。但是对于简单的 JUnit 测试,这似乎是一个相当大的开销(那些在当前位置的测试也可以通过“作为 JUnit 测试运行”运行得很好,并且不需要作为插件测试执行)。我正在寻找一些解决依赖问题的解决方案(看起来它应该是一个小问题!),而没有为测试创建包所带来的管理和运行时开销。
      • 最后,创建一个单独的捆绑包将是最后的手段,但如果有其他合适的解决方案,我很乐意接受。
      猜你喜欢
      • 1970-01-01
      • 2015-04-29
      • 2017-05-15
      • 1970-01-01
      • 1970-01-01
      • 2011-02-04
      • 2017-02-10
      • 2014-01-17
      • 1970-01-01
      相关资源
      最近更新 更多