7

当操作系统上有多种 java 类型可用时,有没有办法在 junit 测试中指定 JVM 版本?

我想做这样的事情:

@JVM=1.5
public void test1(){
   run();
}

@JVM=1.7
public void test2(){
   run();
}

ETC..

4

3 回答 3

7

不,您必须使用多个 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 中运行这些测试两次。

于 2013-01-28T23:22:44.970 回答
1

JUnit 测试用例只是一堆 Java 类,而不是一个独立的程序。所以它们仍然会被限制在同一个 JVM 中。AFAIK 没有简单的方法可以做你想做的事情。您可以做的是将测试用例分成您要测试的每个 java 版本的测试套件。然后在项目设置中更改 java 版本并运行相应的测试套件。

还有一个 junit.jvm 属性,但我不确定你是否可以在执行过程中更改它。你看过了吗?

于 2013-01-28T22:24:00.770 回答
0

在 JUnit 5 上,您可以使用EnabledOnJreDisabledOnJre注释。

  @EnabledOnJre(JRE.JAVA_8)
  void testMyMethodInJava8() {
     ...
  }

  @DisabledOnJre(JRE.JAVA_8)
  void testMyMethodInOtherVersions() {
     ...
  }

您还可以将这些应用于整个测试类:

@EnabledOnJre(JRE.JAVA_11)
public class MyClassTest {
   ...
}

您仍然需要为每个 JVM 单独运行测试套件,但这允许您跳过在其中一个或另一个中不起作用的测试。

于 2022-03-01T09:58:27.253 回答