У меня есть базовый базовый класс, который я использую в качестве базы для своих модульных тестов (TestNG 5.10). В этом классе я инициализирую всю среду для своих тестов, настройки сопоставлений базы данных и т. Д. Этот абстрактный класс имеет метод с аннотацией @BeforeClass
, которая выполняет инициализацию.@BeforeClass и наследование - порядок выполнения
Далее, я расширяю этот класс с помощью специальных классов, в которых у меня есть методы @Test
, а также методы @BeforeClass
. Эти методы выполняют инициализацию среды, специфичную для класса (например, помещают некоторые записи в базу данных).
Как я могу применить конкретный порядок аннотированных методов @BeforeClass
? Мне нужны те из абстрактного базового класса, которые должны выполняться до того, что распространяется на расширяемый класс.
Пример:
abstract class A {
@BeforeClass
doInitialization() {...}
}
class B extends A {
@BeforeClass
doSpecificInitialization() {...}
@Test
doTests() {...}
}
Ожидаемый заказ:
A.doInitialization
B.doSpecificInitialization
B.doTests
Фактический порядок:
B.doSpecificInitialization // <- crashes, as the base init is missing
(A.doInitialization // <---not executed
B.doTests) // <-/
Это в основном то, что я хотел, чтобы избежать: нет необходимости явно вызывать методы супер (абстрактном) класса. Тем более, что у меня также есть классы, которые наследуются от A, но не имеют собственного метода @BeforeClass. Я должен был бы вставить один только для этой цели. –
Обходной способ 'dependOnMethods' сделал трюк. Хотя я бы предпочел подход «суперкласса первым» ... –
Чтобы использовать «dependOnMethod», не следует ли «делать инициализацию» с помощью «@Test»? Это проблема, так как технически это не тест сам по себе ... – N3da