Интеграционное тестирование в 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"));
Если код приложения полагается на параметры запроса сервлета и не проверяет строку запроса явно (как это часто бывает), не имеет значения, какой вариант вы используете. Однако имейте в виду, что параметры запроса, предоставленные с шаблоном URI, декодируются, в то время как параметры запроса, предоставленные с помощью метода param(…), как ожидается, уже будут декодированы.
В большинстве случаев предпочтительно оставлять контекстный путь и путь сервлета вне URI запроса. Если необходимо выполнить тестирование с полным URI запроса, обязательно установите contextPath и servletPath соответственно, чтобы сопоставления запросов работали, как показано в следующем примере:
mockMvc.perform(get("/app/main/hotels/{id}")
.contextPath("/app")
.servletPath("/main"))
В предыдущем примере было бы обременительно задавать contextPath и servletPath для каждого выполняемого запроса. Вместо этого вы можете настроить свойства запроса по умолчанию, как показано в следующем примере:
class MyWebTests {
MockMvc mockMvc;
@BeforeEach
void setup() {
mockMvc = standaloneSetup(new AccountController())
.defaultRequest(get("/")
.contextPath("/app").servletPath("/main")
.accept(MediaType.APPLICATION_JSON)).build();
}
}
Предыдущие свойства влияют на каждый запрос, выполняемый через экземпляр MockMvc. Если то же свойство также указано в данном запросе, оно переопределяет значение по умолчанию. Вот почему метод HTTP и URI в запросе по умолчанию не имеют значения, так как они должны быть указаны в каждом запросе.
Читайте также:
- Интеграционное тестирование в Spring: Spring MVC Test Framework
- Интеграционное тестирование в Spring: Spring MVC Test Framework, варианты установки
- Интеграционное тестирование в Spring: Spring MVC Test Framework, возможности установки
Комментарии
Отправить комментарий