当操作系统上有多种 java 类型可用时,有没有办法在 junit 测试中指定 JVM 版本?
我想做这样的事情:
@JVM=1.5
public void test1(){
run();
}
@JVM=1.7
public void test2(){
run();
}
ETC..
不,您必须使用多个 VM 多次运行 JUnit 测试。然后,您可以使用Assume仅针对正确的 VM 运行测试:
public void test1(){
// not compiled or tested
Assume.assumeThat(System.getProperty("java.version"), CoreMatchers.startsWith("1.5"));
run();
}
public void test2(){
Assume.assumeThat(System.getProperty("java.version"), CoreMatchers.startsWith("1.7"));
run();
}
请注意,我没有编译这个,所以可能会有错误。然后,在您的构建工具中,在两个不同的 VM 中运行这些测试两次。
JUnit 测试用例只是一堆 Java 类,而不是一个独立的程序。所以它们仍然会被限制在同一个 JVM 中。AFAIK 没有简单的方法可以做你想做的事情。您可以做的是将测试用例分成您要测试的每个 java 版本的测试套件。然后在项目设置中更改 java 版本并运行相应的测试套件。
还有一个 junit.jvm 属性,但我不确定你是否可以在执行过程中更改它。你看过了吗?
在 JUnit 5 上,您可以使用EnabledOnJre
和DisabledOnJre
注释。
@EnabledOnJre(JRE.JAVA_8)
void testMyMethodInJava8() {
...
}
@DisabledOnJre(JRE.JAVA_8)
void testMyMethodInOtherVersions() {
...
}
您还可以将这些应用于整个测试类:
@EnabledOnJre(JRE.JAVA_11)
public class MyClassTest {
...
}
您仍然需要为每个 JVM 单独运行测试套件,但这允许您跳过在其中一个或另一个中不起作用的测试。