Интеграционное тестирование в Spring: TestContext Framework, конфигурация контекста с инициализаторами контекста

Чтобы настроить ApplicationContext для ваших тестов с помощью инициализаторов контекста, аннотируйте тестовый класс с помощью @ContextConfiguration и настройте атрибут initializers с помощью массива, который содержит ссылки на классы, реализующие ApplicationContextInitializer. Объявленные инициализаторы контекста затем используются для инициализации ConfigurableApplicationContext, который загружается для ваших тестов. Обратите внимание, что конкретный тип ConfigurableApplicationContext, поддерживаемый каждым объявленным инициализатором, должен быть совместим с типом ApplicationContext, созданным используемым SmartContextLoader (обычно это GenericApplicationContext). Кроме того, порядок, в котором вызываются инициализаторы, зависит от того, реализуют ли они интерфейс Spring Ordered или аннотированы аннотацией Spring @Order или стандартной аннотацией @Priority. В следующем примере показано, как использовать инициализаторы:

@ExtendWith(SpringExtension.class)
// ApplicationContext будет загружен из TestConfig
// и инициализируется TestAppCtxInitializer
@ContextConfiguration(
    classes = TestConfig.class,
    initializers = TestAppCtxInitializer.class) 
class MyTest {
    // тело класса...
}

Указание конфигурации с помощью класса конфигурации и инициализатора.

Вы также можете полностью опустить объявление файлов конфигурации XML, скриптов Groovy или классов компонентов в @ContextConfiguration и вместо этого объявить только классы ApplicationContextInitializer, которые затем отвечают за регистрацию компонентов в контексте - например, путем программной загрузки определений компонентов из файлов XML или классов конфигурации. В следующем примере показано, как это сделать:

@ExtendWith(SpringExtension.class)
// ApplicationContext будет инициализирован EntireAppInitializer
// который предположительно регистрирует beans в контексте
@ContextConfiguration(initializers = EntireAppInitializer.class) 
class MyTest {
    // тело класса...
}


Читайте также:


Комментарии

Популярные сообщения из этого блога

Методы класса Object в Java

Как получить текущий timestamp в Java

Основные опции JVM для повышения производительности и отладки