为什么执行子类测试方法时我的@BeforeClass方法不能运行?

时间:2019-02-06 21:05:31

标签: java junit4

我正在使用IntelliJ IDEA CE 2018.3和JUnit 4.12。

我有一个看起来像这样的测试类:

@RunWith(HierarchicalContextRunner.class)
public class TestClass {
  @BeforeClass
  public static void beforeAll() {
    //start a server for all tests to hit
  }

  @Before
  public void before() {
    //init a common request object for each test
  }

  @Test
  public void itShouldHaveSomeCommonProperty() {
    //check some common thing
  }

  public class SomeSubTestClass {
    @Before
    public void before() {
      //do some test case-specific setup
    }

    public class SomeOtherSubTestClass {
      @Test
      public void itShouldDoSomething() {
        //hit the service and assert something about the result
      }
    }
  }
}

当我告诉IntelliJ运行该类时,一切都会按预期进行。但是,如果我只想运行itShouldDoSomething测试(通过设置针对SomeOtherSubTestClass类的运行配置来完成此测试),则不会执行beforeAll方法。两种before方法均以正确的顺序执行,但静态beforeAll方法却未正确执行。

我误会了什么,还是这是个错误?

1 个答案:

答案 0 :(得分:3)

这不是错误。

beforeAll方法是静态的,因此绑定到类而不是实例。这就是为什么在内部类或子类中调用测试时不执行它的原因。

要确保调用它,您必须在每个内部类中定义一个@BeforeClass方法,然后在外部类上调用该方法。