Сообщения

Показаны сообщения с ярлыком "Spring MVC Test Framework"

Интеграционное тестирование в Spring: Spring MVC Test Framework, асинхронные запросы

Изображение
Асинхронные запросы Servlet 3.0, поддерживаемые в Spring MVC, работают, выходя из потока контейнера сервлета и позволяя приложению вычислять ответ асинхронно, после чего выполняется асинхронная отправка для завершения обработки в потоке контейнера сервлета. В Spring MVC Test можно протестировать асинхронные запросы, сначала подтвердив созданное значение async, затем вручную выполнив асинхронную отправку и, наконец, проверив ответ. Ниже приведен пример теста для методов контроллера, которые возвращают DeferredResult, Callable или реактивный тип, например Reactor Mono: @Test void test() throws Exception { MvcResult mvcResult = this.mockMvc.perform(get("/path")) .andExpect(status().isOk()) // Статус ответа на проверку не изменился .andExpect(request().asyncStarted()) // Асинхронная обработка должна быть запущена .andExpect(request().asyncResult("body")) // Подождите и подтвердите результат async .andReturn(); ...

Интеграционное тестирование в Spring: Spring MVC Test Framework, определение ожиданий

Изображение
Вы можете определить ожидания, добавив один или несколько вызовов .andExpect(..) после выполнения запроса, как показано в следующем примере: mockMvc.perform(get("/accounts/1")) .andExpect(status().isOk()); MockMvcResultMatchers.* предоставляет ряд ожиданий, некоторые из которых дополнительно вложены в более подробные ожидания. Ожидания делятся на две общие категории. Первая категория утверждений проверяет свойства ответа (например, статус ответа, заголовки и содержимое). Это самые важные результаты, которые нужно утверждать. Вторая категория утверждений выходит за рамки ответа. Эти утверждения позволяют вам проверять конкретные аспекты Spring MVC, например, какой метод контроллера обработал запрос, было ли вызвано и обработано исключение, каково содержимое модели, какое представление было выбрано, какие атрибуты были добавлены и т. д. Они также позволяют вам проверять конкретные аспекты сервлета, такие как атрибуты запроса и сеанса. Следующий тест утверждает,...

Интеграционное тестирование в Spring: Spring MVC Test Framework, выполнение запросов

Изображение
Вы можете выполнять запросы, которые используют любой метод HTTP, как показано в следующем примере: mockMvc.perform(post("/hotels/{id}", 42) .accept(MediaType.APPLICATION_JSON)); Вы также можете выполнять запросы загрузки файлов, которые внутренне используют MockMultipartHttpServletRequest, чтобы не было фактического синтаксического анализа составного запроса. Скорее, вы должны настроить его, как в следующем примере: mockMvc.perform(multipart("/doc") .file("a1", "ABC".getBytes("UTF-8"))); Вы можете указать параметры запроса в стиле шаблона URI, как показано в следующем примере: mockMvc.perform(get("/hotels?thing={thing}", "somewhere")); Вы также можете добавить параметры запроса сервлета, которые представляют параметры запроса или формы, как показано в следующем примере: mockMvc.perform(get("/hotels").param("thing", "somewhere")); Если код прилож...

Интеграционное тестирование в Spring: Spring MVC Test Framework, возможности установки

Изображение
Независимо от того, какой конструктор MockMvc вы используете, все реализации MockMvcBuilder предоставляют некоторые общие и очень полезные функции. Например, вы можете объявить заголовок Accept для всех запросов и ожидать статус 200, а также заголовок Content-Type во всех ответах, как показано ниже: // static import of MockMvcBuilders.standaloneSetup MockMvc mockMvc = standaloneSetup(new MusicController()) .defaultRequest(get("/") .accept(MediaType.APPLICATION_JSON)) .alwaysExpect(status().isOk()) .alwaysExpect(content().contentType("application/json;charset=UTF-8")) .build(); Кроме того, сторонние платформы (и приложения) могут предварительно упаковать инструкции по установке, например, в MockMvcConfigurer. Spring Framework имеет одну такую встроенную реализацию, которая помогает сохранять и повторно использовать сеанс HTTP для разных запросов. Вы можете использовать его следующим образом: // static import of SharedHttpSessionConfi...

Интеграционное тестирование в Spring: Spring MVC Test Framework, варианты установки

Изображение
У вас есть два основных варианта создания экземпляра MockMvc. Первый - загрузить конфигурацию Spring MVC через TestContext framework, которая загружает конфигурацию Spring и вводит WebApplicationContext в тест, чтобы использовать его для создания экземпляра MockMvc. В следующем примере показано, как это сделать: @SpringJUnitWebConfig(locations = "my-servlet-context.xml") class MyWebTests { MockMvc mockMvc; @BeforeEach void setup(WebApplicationContext wac) { this.mockMvc = MockMvcBuilders .webAppContextSetup(this.wac) .build(); } // ... } Второй вариант - вручную создать экземпляр контроллера без загрузки конфигурации Spring. Вместо этого автоматически создается базовая конфигурация по умолчанию, примерно сопоставимая с конфигурацией MVC JavaConfig или пространства имен MVC. Вы можете настроить его до определенной степени. В следующем примере показано, как это сделать: class MyWebTests { ...

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

Изображение
Spring MVC Test framework обеспечивает первоклассную поддержку для тестирования кода Spring MVC с помощью свободного API, который вы можете использовать с JUnit, TestNG или любым другим фреймворком тестирования. Он построен на mock объектах Servlet API из модуля spring-test и, следовательно, не использует работающий контейнер сервлетов. Он использует DispatcherServlet для обеспечения полного поведения среды выполнения Spring MVC и обеспечивает поддержку загрузки фактической конфигурации Spring с TestContext framework в дополнение к автономному режиму, в котором вы можете вручную создавать экземпляры контроллеров и тестировать их по одному. Spring MVC Test также обеспечивает поддержку на стороне клиента для тестирования кода, использующего RestTemplate. Клиентские тесты имитируют ответы сервера, а также не используют работающий сервер. Spring Boot предоставляет возможность писать полные сквозные интеграционные тесты, которые включают работающий сервер. Серверные тесты Вы можете напи...