Почему мой метод @BeforeClass не запускается при выполнении метода теста подкласса? - PullRequest
0 голосов
/ 07 февраля 2019

Я использую 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 голосов
/ 07 февраля 2019

Это не ошибка.

Метод beforeAll является статическим и поэтому привязан к классу, а не к экземпляру.Вот почему он не выполняется при вызове тестов во внутренних классах или подклассах.

Чтобы гарантировать, что он вызывается, вам необходимо определить метод @BeforeClass в каждом из ваших внутренних классов, который затем вызывает методна внешний класс.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...