Одна потенциальная ошибка, которая укусила меня раньше:
Мне бы хотелось иметь не более одного @Before
метода в каждом тестовом классе, потому что порядок запуска методов @Before
, определенных в классе, не гарантирован,Обычно я назову такой метод setUpTest()
.
Но, хотя @Before
задокументировано как The @Before methods of superclasses will be run before those of the current class. No other ordering is defined.
, это применимо, только если у каждого метода, отмеченного @Before
, есть уникальное имя в иерархии классов.
Например, у меня былоследующее:
public class AbstractFooTest {
@Before
public void setUpTest() {
...
}
}
public void FooTest extends AbstractFooTest {
@Before
public void setUpTest() {
...
}
}
Я ожидал, что AbstractFooTest.setUpTest()
будет запущен до FooTest.setUpTest()
, но только FooTest.setupTest()
был выполнен.AbstractFooTest.setUpTest()
не был вызван вообще.
Для работы необходимо изменить код следующим образом:
public void FooTest extends AbstractFooTest {
@Before
public void setUpTest() {
super.setUpTest();
...
}
}