针对多个 Java 版本进行测试的最佳方法

Best methodology to test against multiple Java versions

我有多个单元测试和组件测试,我想针对 Java(1.6、1.7、1.8 等)的多个版本进行测试。

我想知道最好的方法是什么?

我是否应该 运行 使用 Jenkins 测试几次,并且每次我将 JAVA_HOME 变量的路径更改为不同的 JRE?

我可以使用 Maven 插件吗?也许不同的配置文件?

另外,有没有办法使用TestNG来排除基于JRE版本的测试?我可以在 java.version 系统 属性 上使用 if 语句来处理它,但是我想知道是否有更优雅的方法。

如果这会影响答案,我想提一下,期待我想针对几种 OS 类型和产品的多个版本进行测试(针对 v1.0、v2 的相同测试.0 等)。

到运行不同条件下的相同代码jenkins可以简单地运行具有不同JAVA_HOME或其他设置的相同脚本。在不同的触发器上或作为一个多阶段工作的一部分执行此操作由您决定

关于TestNG,请看这个回答How to disable testng test based on a condition

一种可能的方法是使用 Maven 配置文件,结合 maven toolchains plugin

在这种方法中,您将在构建服务器上配置多个 JDK,并将您的 pom xml 配置为具有不同的配置文件,运行 您的单元测试每个 JDK。

您可能不仅要考虑测试不同的 java 运行 次,还要考虑测试不同的目标 class 版本;这也可以通过具有不同编译设置的不同配置文件来与配置文件方法结合。

最后,exclusion of sure fire tests 也可以从配置文件中完成,让您也可以控制它。

我知道许多使用 TravisCI 的开源项目中使用的一种方法。在这些项目中,.travis.yml 文件(TravisCI 的元数据文件)包含此信息。示例:-

jdk:
  - oraclejdk7
  - oraclejdk8
  - openjdk6
  - openjdk7

我也在我的一个开源项目中使用它 (see here)。我不知道在行业中我们是否有一些其他简化的流程,但它可能是开放的,并且可能因组织和组织以及项目而异。