文|码术张
#####一、ClassRule与Rule的比较
下面两个类ClassRuleTest、TimeoutTest,分别使用ClassRule、Rule,来判断两个Test方法的运行时间。

一个Test方法是should_timeout1,打印一个字母A后,睡眠2000ms。

一个Test方法是should_timeout2,打印一个字母B后,睡眠2000ms。

ClassRuleTest类:

public class ClassRuleTest {
  @ClassRule
  public  static Timeout timeout = Timeout.millis(3000);

  @Test
  public void should_timeout1() throws InterruptedException {
    System.out.println("A...");
    Thread.sleep(2000);
  }

  @Test
  public void should_timeout2() throws InterruptedException {
    System.out.println("B...");
    Thread.sleep(2000);
  }

}

运行结果为:

【JAVA-UT】10、ClassRule--集体的规范

TimeoutTest类:

public class TimeoutTest {
  @Rule
  public TestRule timeout = Timeout.millis(3000);

  @Test
  public void should_timeout1() throws InterruptedException {
     System.out.println("A...");
     Thread.sleep(2000);
  }

  @Test
  public void should_timeout2() throws InterruptedException {
     System.out.println("B...");
     Thread.sleep(2000);
  }
}

运行结果为:

【JAVA-UT】10、ClassRule--集体的规范

运行结果一个失败,一个成功。

为什么?

使用Rule,意味着每一个测试方法的运行时间,不能超过设置的时间,如3000ms。

使用ClassRule,则是所有测试方法的运行时间的和,不能超过3000ms。

Rule的作用范围是method-level.

ClassRule的作用范围是class level.

另外在声明上不同:

@ClassRule
public static Timeout timeout = Timeout.millis(3000);
@Rule
public TestRule timeout = Timeout.millis(3000);

使用ClassRule时,变量必须声明为public static,而使用Rule,不需要static。

相关文章:

  • 2022-01-12
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2021-07-11
  • 2022-12-23
  • 2022-01-12
猜你喜欢
  • 2021-09-08
  • 2021-11-13
  • 2021-08-20
  • 2021-10-16
  • 2022-02-23
  • 2021-09-24
  • 2022-02-23
相关资源
相似解决方案