我正在使用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
方法却未正确执行。
我误会了什么,还是这是个错误?
答案 0 :(得分:3)
这不是错误。
beforeAll
方法是静态的,因此绑定到类而不是实例。这就是为什么在内部类或子类中调用测试时不执行它的原因。
要确保调用它,您必须在每个内部类中定义一个@BeforeClass
方法,然后在外部类上调用该方法。