Юнит-тестирование в Spring: mock объекты

Spring включает ряд пакетов, посвященных мокам:

  • Environment
  • JNDI
  • Servlet API
  • Spring Web Reactive

Environment

Пакет org.springframework.mock.env содержит фиктивные (mock) реализации абстракций Environment и PropertySource. MockEnvironment и MockPropertySource полезны для разработки внеконтейнерных тестов для кода, который зависит от свойств среды.

JNDI

Пакет org.springframework.mock.jndi содержит частичную реализацию JNDI SPI, которую вы можете использовать для настройки простой среды JNDI для наборов тестов или автономных приложений. Если, например, экземпляры JDBC DataSource привязаны к тем же именам JNDI в тестовом коде, что и в контейнере Java EE, вы можете повторно использовать как код приложения, так и конфигурацию в сценариях тестирования без изменений.

Поддержка фиктивного (mock) JNDI в пакете org.springframework.mock.jndi официально устарела в Spring Framework 5.2 в пользу полных решений от третьих сторон, таких как Simple-JNDI.

Servlet API

Пакет org.springframework.mock.web содержит исчерпывающий набор mock объектов Servlet API, которые полезны для тестирования веб-контекстов, контроллеров и фильтров. Эти mock объекты предназначены для использования в среде Spring Web MVC и, как правило, более удобны в использовании, чем динамические mock объекты (такие как EasyMock) или альтернативные mock объекты Servlet API (например, MockObjects).

Начиная с Spring Framework 5.0, mock объекты в org.springframework.mock.web основаны на Servlet 4.0 API.

Инфраструктура тестирования Spring MVC построена на mock объектах Servlet API, чтобы обеспечить среду тестирования интеграции для Spring MVC.

Spring Web Reactive

Пакет org.springframework.mock.http.server.reactive содержит mock реализации ServerHttpRequest и ServerHttpResponse для использования в приложениях WebFlux. Пакет org.springframework.mock.web.server содержит mock ServerWebExchange, который зависит от этих mock объектов запроса и ответа.

И MockServerHttpRequest, и MockServerHttpResponse происходят от тех же абстрактных базовых классов, что и специфичные для сервера реализации, и делятся с ними поведением. Например, mock запрос является неизменяемым после создания, но вы можете использовать метод mutate() из ServerHttpRequest для создания измененного экземпляра.

Чтобы mock ответ правильно реализовал контракт записи и возвратил дескриптор завершения записи (то есть Mono<Void>), он по умолчанию использует Flux с cache().then(), который буферизует данные и делает их доступны для утверждений в тестах. Приложения могут устанавливать пользовательскую функцию write (например, для проверки бесконечного потока).

WebTestClient основан на mock запросе и ответе, чтобы обеспечить поддержку тестирования приложений WebFlux без HTTP-сервера. Клиент также может использоваться для сквозных (end-to-end) тестов с работающим сервером.


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


Комментарии

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

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

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

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