Spring TestContext Framework (находящийся в пакете org.springframework.test.context
обеспечивает общую, управляемую аннотациями поддержку модульного и интеграционного тестирования, которая не зависит от используемой среды тестирования. В фреймворке TestContext также большее значение придается соглашению, а не конфигурации, при разумных значениях по умолчанию, которые можно менять с помощью конфигурации на основе аннотаций.
В дополнение к общей тестовой инфраструктуре, фреймворк TestContext обеспечивает явную поддержку JUnit 4, JUnit Jupiter (он же JUnit 5) и TestNG. Для JUnit 4 и TestNG Spring представлены abstract
вспомогательные классы. Более того, Spring предоставляет специальный Runner
из JUnit и специальные Rules
из JUnit для JUnit 4 и специальное Extension
для JUnit Jupiter, которые позволяют писать так называемые тестовые классы POJO. Тестовые классы POJO не обязательно расширяют определенную иерархию классов, например, абстрактные
вспомогательные классы.
В следующем разделе кратко рассмотрены внутренние составляющие фреймворка TestContext. Если вас интересует только использование фреймворка и вам не нужно расширять его своими собственными специальными слушателями или загрузчиками, переходите непосредственно к разделам, посвященным конфигурации, (управление контекстом, внедрение зависимостей, управление транзакциями), вспомогательным классам и поддержке аннотаций.
См. упомянутые разделы в "Вспомогательные классы фреймворка TestContext".
Ключевые абстракции
Ядро фреймворка состоит из класса TestContextManager
и интерфейсов TestContext
, TestExecutionListener
и SmartContextLoader
. Интерфейс TestContextManager
создается для каждого тестового класса (например, для выполнения всех тестовых методов в рамках одного тестового класса в JUnit Jupiter). Интерфейс TestContextManager
, в свою очередь, управляет TestContext
, который содержит контекст текущего теста. Интерфейс TestContextManager
также обновляет состояние TestContext
по мере выполнения теста и делегирует работу реализациям TestExecutionListener
, которые инструментируют фактическое выполнение теста, обеспечивая внедрение зависимостей, управление транзакциями и так далее. Интерфейс SmartContextLoader
отвечает за загрузку ApplicationContext
для данного тестового класса. Дополнительную информацию и примеры различных реализаций см. в javadoc и тестовом комплекте Spring.
TestContext
Интерфейс TestContext
инкапсулирует контекст, в котором выполняется тест (независимо от реально используемого тестового фреймворка), и обеспечивает управление контекстом, а также поддержку кэширования для экземпляра теста, за который он отвечает. Интерфейс TestContext
также делегирует SmartContextLoader
загрузку ApplicationContext
по запросу.
TestContextManager
Интерфейс TestContextManager
является основной точкой входа в Spring TestContext Framework и отвечает за управление одним TestContext
и сигнализацию событий каждому зарегистрированному TestExecutionListener
в четко определенных точках выполнения теста:
-
Перед любыми методами "перед классами" или "перед всеми" конкретного тестового фреймворка.
-
Постобработка тестового экземпляра.
-
Перед любыми методами "перед" или "перед каждым" конкретного тестового фреймворка.
-
Непосредственно перед выполнением тестового метода, но после настройки теста.
-
Непосредственно после выполнения тестового метода, но до разрушения теста.
-
После любых методов "после" или "после каждого" конкретного тестового фреймворка.
-
После любых методов "после класса" или "после всех" конкретного тестового фреймворка.
TestExecutionListener
Слушатель TestExecutionListener
определяет API-интерфейс для реагирования на события выполнения теста, публикуемые TestContextManager
, с которым зарегистрирован слушатель. См. Конфигурация TestExecutionListener
.
Context Loaders
Контекстный загрузчик ContextLoader
– это интерфейс стратегии для загрузки ApplicationContext
для интеграционного теста, управляемого Spring TestContext Framework. Вам необходимо реализовать SmartContextLoader
вместо этого интерфейса, чтобы обеспечить поддержку компонентных классов, профилей определения активных бинов, источников тестовых свойств, иерархий контекстов и поддержкуWebApplicationContext
.
Загрузчик SmartContextLoader
– это расширение интерфейса ContextLoader,
которое заменяет оригинальный простой SPI-интерфейс ContextLoader.
В частности, SmartContextLoader
может выбрать обработку местоположений ресурсов, компонентных классов или инициализаторов контекста. Кроме того, SmartContextLoader
может устанавливать активные профили определения бинов и источники тестовых свойств в загружаемом контексте.
Spring provides the following implementations:
-
DelegatingSmartContextLoader
: Один из двух загрузчиков по умолчанию, он внутренне делегирует работу загрузчикамAnnotationConfigContextLoader
,GenericXmlContextLoader
илиGenericGroovyXmlContextLoader
, в зависимости либо от конфигурации, объявленной для тестового класса, либо от наличия местоположений по умолчанию или конфигурационных классов по умолчанию. Поддержка Groovy активируется, только если Groovy находится в пути классов. -
WebDelegatingSmartContextLoader
: Один из двух загрузчиков по умолчанию, он внутренне делегирует работу загрузчикамAnnotationConfigWebContextLoader
,GenericXmlWebContextLoader
илиGenericGroovyXmlWebContextLoader
в зависимости либо от конфигурации, объявленной для тестового класса, либо от наличия местоположений по умолчанию или конфигурационных классов по умолчанию. Веб-загрузчикContextLoader
используется только в том случае, если в тестовом классе присутствует аннотация@WebAppConfiguration.
Поддержка Groovy активируется, только если Groovy находится в пути классов. -
AnnotationConfigContextLoader
: Загружает стандартныйApplicationContext
из компонентных классов. -
AnnotationConfigWebContextLoader
: ЗагружаетWebApplicationContext
из компонентных классов. -
GenericGroovyXmlContextLoader
: Загружает стандартныйApplicationContext
из ресурсов, которые представляют собой либо скрипты Groovy, либо конфигурационные XML-файлы. -
GenericGroovyXmlWebContextLoader
: ЗагружаетWebApplicationContext
из ресурсов, которые представляют собой либо скрипты Groovy, либо конфигурационные XML-файлы . -
GenericXmlContextLoader
: Загружает стандартныйApplicationContext
из местоположений XML-ресурсов. -
GenericXmlWebContextLoader
: ЗагружаетWebApplicationContext
из местоположений XML-ресурсов.
Начальная загрузка фреймворка TestContext
Конфигурация по умолчанию для внутренних компонентов Spring TestContext Framework является достаточной для всех распространенных случаев использования. Однако бывают случаи, когда команде разработчиков или стороннему фреймворку нужно изменить стандартный ContextLoader
, реализовать пользовательский TestContext
или ContextCache
, дополнить стандартные наборы реализаций ContextCustomizerFactory
и TestExecutionListener
и так далее. Для такого низкоуровневого контроля над работой фреймворка TestContext среда Spring предоставляет стратегию начальной загрузки.
TestContextBootstrapper
определяет SPI-интерфейс для загрузки фреймворка TestContext. TestContextBootstrapper
используется TestContextManager
для загрузки реализаций TestExecutionListener
для текущего теста и для построения TestContext
, которым он управляет. Вы можете сконфигурировать специальную стратегию начальной загрузки для тестового класса (или иерархии тестовых классов) с помощью указания аннотации @BootstrapWith
либо напрямую, либо как мета-аннотации. Если начальный загрузчик (bootstrapper ) не сконфигурирован явно с помощью аннотации @BootstrapWith
, используется либо DefaultTestContextBootstrapper,
либо WebTestContextBootstrapper
, в зависимости от наличия аннотации @WebAppConfiguration
.
Поскольку SPI-интерфейс TestContextBootstrapper
, скорее всего, изменится в будущем (чтобы учитывать новые требования), мы настоятельно рекомендуем разработчикам не реализовывать этот интерфейс напрямую, а вместо этого расширить AbstractTestContextBootstrapper
или один из его конкретных подклассов.
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ