Как создать Extension, который запускается beforeAll только один раз для всего большого класса со многими вложенными классами внутри
Учитывая мой проверенный класс со многими вложенными классами внутри:
class TestWithManyNested {
@RegisterExtension
static MyExtension extension = new MyExtension();
@Nested
class Nested1 {
@Test
void nested1() {
}
}
@Nested
class Nested2 {
@Test
void nested2() {
}
}
}
Вот мое простое расширение:
static class MyExtension implements BeforeAllCallback, AfterAllCallback, BeforeEachCallback, AfterEachCallback {
@Override
public void beforeAll(ExtensionContext extensionContext) throws Exception {
System.out.println("beforeAll");
}
@Override
public void afterAll(ExtensionContext extensionContext) throws Exception {
System.out.println("afterAll");
}
}
Как я могу запустить свой TestWithManyNested
с MyExtension
которые просто бегут beforeAll
только один раз за весь тест
1 ответ
Решение
Если вы хотите, чтобы обратные вызовы уровня класса выполнялись только для самого внешнего класса, вы можете переписать свое расширение следующим образом (проверяя, что для внешнего класса нет "включающего класса").
static class MyExtension implements BeforeAllCallback, AfterAllCallback {
@Override
public void beforeAll(ExtensionContext extensionContext) throws Exception {
Class<?> testClass = extensionContext.getRequiredTestClass();
if (testClass.getEnclosingClass() == null) {
System.err.println("beforeAll: " + testClass.getName());
}
}
@Override
public void afterAll(ExtensionContext extensionContext) throws Exception {
Class<?> testClass = extensionContext.getRequiredTestClass();
if (testClass.getEnclosingClass() == null) {
System.err.println("afterAll: " + testClass.getName());
}
}
}