java - 在 Maven 构建期间针对多个 JVM 或库版本进行测试?

标签 java unit-testing maven jvm

上下文

基本上,我有一个库用于在 java 6、java 7 和现在的 java 8 上运行的多个应用程序。

该库还依赖于一个令人毛骨悚然(但非常有用)的第三方库(我不会说出它的名字)——一个不太关心前向兼容性的库。上述应用程序也大量使用此第三方库,但并不总是能够更新到最新版本。我已经习惯了,所以我的代码中有很多“如果”来处理一些愚蠢的事情。

问题

今天我偶然发现了一个恼人的问题:第三方库中的某些方法在 java 7 及更早版本中运行时与在 java 8 及更高版本中运行时具有不同的行为。

我的单元测试旨在覆盖我的这部分代码,如果使用正确的 java/库组合运行它们就会发现错误。

问题一

我如何才能很好地集成到 Maven 构建生命周期中,并使用 Java 6、Java 7 和 Java 8 按顺序运行我的测试? (这意味着如果任何 jvm 的任何测试失败,则失败)

问题2

与上面相同,但为每个“受支持”的第三方库版本添加另一个顺序运行?

(这意味着,需要明确的是,如果我“支持”此库的所有 3 个 Java 版本的 6.11、6.12、6.13 和 6.14 版,我将运行 4*3=12 次我的单元测试)

最佳答案

我有类似的问题。我创建了一个库,应该针对其他库和(但不太重要)jvm 的不同版本(所有版本都在 Maven Central 中可用)进行测试。

我的结论:仅在 Maven 中执行此操作即使不是不可能,也会非常麻烦和困难。您还必须将环境/系统依赖项编码到您的构建工具中

如建议的那样,大多数集成服务器都支持矩阵测试。您还可以使用它来手动提供您需要测试的库的每个版本(如果您预先知道它们)。库部分在 gradle 中应该更容易实现(但仍然没有开箱即用的支持)。

关于测试次数:是的,必须运行 x * y 次。如果您的代码很大,请考虑隔离使用其他库的部分,并为每个 jvm 只运行这个小部分 x 次——这样会更快一些。您也可以并行运行这些测试

ps:我正在考虑编写一个 gradle 插件或者至少是一个概念验证构建。但我认为不会很快。但我对其他贡献者开放:)

关于java - 在 Maven 构建期间针对多个 JVM 或库版本进行测试?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27532309/

相关文章:

java - ClassNotFoundException org.openqa.selenium.WebDriver

java - 循环语句的freemarker模板

database - 如何进行数据库单元测试?

java - 如何在 eclipse 中为 jar 附加 javadoc?

multithreading - 我应该如何对多线程代码进行单元测试?

Python:如果登录不起作用,单元测试用例不会显示错误

java - maven 存储库中不存在 Spring Boot quickstart?

maven-2 - 如何运行jetty :run-war using a war defined by maven coordinates?

java - Hibernate Inheritance.TABLE_PER_CLASS 策略

java - Android 菜单充气错误