В каком порядке вызывается Junit @ Before / @ After?

У меня есть набор интеграционных тестов. У меня есть класс IntegrationTestBase для расширения всех моих тестов. Этот базовый класс имеет метод @Before ( public void setUp () ) и @After ( public void tearDown () ) для установить соединения API и БД. Я просто переопределяю эти два метода в каждом тестовом примере и вызываю super.setUp () и super.tearDown () . Однако это может вызвать проблемы, если кто-то забудет вызвать super или поместит их в неправильное место, и возникнет исключение, и они забудут вызвать super в finally или чем-то еще.

Я хочу сделать setUp и tearDown в базовом классе final , а затем просто добавьте наши собственные аннотированные @Before и @After методы. При выполнении некоторых начальных тестов кажется, что он всегда вызывает в следующем порядке:

Base @Before
Test @Before
Test
Test @After
Base @After

, но меня немного беспокоит, что порядок не гарантирован и что это может вызвать проблемы. Я огляделась и ничего не нашла по этой теме. Кто-нибудь знает, могу ли я это сделать и у меня не будет никаких проблем?

Код:

public class IntegrationTestBase {

    @Before
    public final void setUp() { *always called 1st?* }

    @After
    public final void tearDown() { *always called last?* }
}


public class MyTest extends IntegrationTestBase {

    @Before
    public final void before() { *always called 2nd?* }

    @Test
    public void test() { *always called 3rd?* }

    @After
    public final void after() { *always called 4th?* }
}
128
задан double-beep 24 January 2019 в 18:01
поделиться