Интеграционное тестирование в Spring: Spring TestContext Framework

Spring TestContext Framework (расположенный в пакете org.springframework.test.context) обеспечивает универсальную поддержку модульного и интеграционного тестирования на основе аннотаций, которая не зависит от используемой среды тестирования. TestContext framework также придает большое значение соглашению о конфигурации с разумными значениями по умолчанию, которые вы можете переопределить с помощью конфигурации на основе аннотаций.

В дополнение к общей инфраструктуре тестирования, TestContext framework обеспечивает явную поддержку JUnit 4, JUnit Jupiter (AKA JUnit 5) и TestNG. Для JUnit 4 и TestNG Spring предоставляет абстрактные классы поддержки. Кроме того, Spring предоставляет настраиваемый JUnit Runner и настраиваемые правила JUnit для JUnit 4 и настраиваемое расширение для JUnit Jupiter, которые позволяют писать так называемые тестовые классы POJO. Тестовые классы POJO не требуются для расширения определенной иерархии классов, например, абстрактные вспомогательные классы.

Ключевые абстракции

Ядро платформы состоит из класса TestContextManager и интерфейсов TestContext, TestExecutionListener и SmartContextLoader. TestContextManager создается для каждого тестового класса (например, для выполнения всех тестовых методов в одном тестовом классе в JUnit Jupiter). TestContextManager, в свою очередь, управляет TestContext, который содержит контекст текущего теста. TestContextManager также обновляет состояние TestContext по мере выполнения теста и делегирует реализации TestExecutionListener, которые инструментируют фактическое выполнение теста, обеспечивая внедрение зависимостей, управление транзакциями и т.д. SmartContextLoader отвечает за загрузку ApplicationContext для заданного тестового класса.

TestContext

TestContext инкапсулирует контекст, в котором выполняется тест (независимо от фактической используемой среды тестирования), и обеспечивает управление контекстом и поддержку кэширования для экземпляра теста, за который он отвечает. TestContext также делегирует SmartContextLoader загрузку ApplicationContext по запросу.

TestContextManager

TestContextManager является основной точкой входа в Spring TestContext Framework и отвечает за управление одним TestContext и сигнальные события для каждого зарегистрированного TestExecutionListener в четко определенных точках выполнения теста:

  • Перед любыми методами "до класса" или "до всех" конкретной среды тестирования.
  • Постобработка тестового экземпляра.
  • Перед любыми методами "до" или "перед каждым" конкретной среды тестирования.
  • Непосредственно перед выполнением метода тестирования, но после настройки теста.
  • Сразу после выполнения метода тестирования, но до снятия теста.
  • После любых методов "после" или "после каждого" конкретной среды тестирования.
  • После любых методов "после класса" или "после всех" конкретной среды тестирования.

TestExecutionListener

TestExecutionListener определяет API для реакции на события выполнения теста, опубликованные TestContextManager, с которым зарегистрирован прослушиватель.

Загрузчики контекста

ContextLoader - это стратегический интерфейс для загрузки ApplicationContext для интеграционного теста, управляемого Spring TestContext Framework. Вы должны реализовать SmartContextLoader вместо этого интерфейса, чтобы обеспечить поддержку классов компонентов, профилей определения активных компонентов, источников тестовых свойств, иерархий контекстов и поддержки WebApplicationContext.

SmartContextLoader - это расширение интерфейса ContextLoader, которое заменяет исходный минимальный SPI ContextLoader. В частности, SmartContextLoader может выбрать обработку местоположений ресурсов, классов компонентов или инициализаторов контекста. Более того, SmartContextLoader может устанавливать активные профили определения bean-компонентов и источники тестовых свойств в контексте, который он загружает.

Spring предоставляет следующие реализации:

  • 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.
  • GenericPropertiesContextLoader: загружает стандартный ApplicationContext из файлов свойств Java.

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


Комментарии

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

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

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

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