[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"question-spring-test-kak-vypolnyat-zaprosy-i-proveryat-rezultaty-v-mockmvc":3},{"id":4,"slug":5,"topicId":6,"topicSlug":7,"topicName":8,"topicEmoji":9,"question":10,"answer":11,"codeLang":12,"codeSrc":12,"important":12,"commonMistakes":12,"modernUsage":12,"difficulty":13,"tags":14,"related":15,"progress":16,"seo":17},698,"kak-vypolnyat-zaprosy-i-proveryat-rezultaty-v-mockmvc",16,"spring-test","Spring Test","🧪","Как выполнять запросы и проверять результаты в MockMvc?","`MockMvc` предоставляет DSL для выполнения HTTP-запросов и проверки ответов без запуска реального сервера.\n\n### Выполнение запросов (perform)\n\n\u003Cdetails>\u003Csummary>Примеры запросов\u003C\u002Fsummary>\n\n```java\n\u002F\u002F GET-запрос с параметрами\nmockMvc.perform(get(\"\u002Fapi\u002Fusers\")\n    .param(\"page\", \"0\")\n    .param(\"size\", \"10\")\n    .header(\"Authorization\", \"Bearer token123\")\n    .accept(MediaType.APPLICATION_JSON));\n\n\u002F\u002F POST-запрос с JSON-телом\nmockMvc.perform(post(\"\u002Fapi\u002Fusers\")\n    .contentType(MediaType.APPLICATION_JSON)\n    .content(objectMapper.writeValueAsString(userDto)));\n\n\u002F\u002F PUT-запрос\nmockMvc.perform(put(\"\u002Fapi\u002Fusers\u002F{id}\", 1)\n    .contentType(MediaType.APPLICATION_JSON)\n    .content(\"{\\\"name\\\": \\\"Обновлённый\\\"}\"));\n\n\u002F\u002F DELETE-запрос\nmockMvc.perform(delete(\"\u002Fapi\u002Fusers\u002F{id}\", 1));\n\n\u002F\u002F Multipart (загрузка файлов)\nmockMvc.perform(multipart(\"\u002Fapi\u002Fupload\")\n    .file(new MockMultipartFile(\"file\", \"test.txt\",\n        \"text\u002Fplain\", \"содержимое\".getBytes())));\n```\n\n\u003C\u002Fdetails>\n\n### Проверка результатов (andExpect)\n\n```java\nmockMvc.perform(get(\"\u002Fapi\u002Fusers\u002F1\"))\n    \u002F\u002F Статус ответа\n    .andExpect(status().isOk())                 \u002F\u002F 200\n    .andExpect(status().isCreated())             \u002F\u002F 201\n    .andExpect(status().isBadRequest())          \u002F\u002F 400\n    .andExpect(status().isNotFound())            \u002F\u002F 404\n\n    \u002F\u002F Заголовки\n    .andExpect(header().string(\"Content-Type\", \"application\u002Fjson\"))\n    .andExpect(header().exists(\"X-Custom-Header\"))\n\n    \u002F\u002F Содержимое ответа\n    .andExpect(content().string(\"hello\"))\n    .andExpect(content().contentType(MediaType.APPLICATION_JSON));\n```\n\n### Работа с JSON через jsonPath\n\n```java\nmockMvc.perform(get(\"\u002Fapi\u002Fusers\"))\n    .andExpect(jsonPath(\"$[0].name\").value(\"Иван\"))\n    .andExpect(jsonPath(\"$\", hasSize(3)))\n    .andExpect(jsonPath(\"$[0].email\").exists())\n    .andExpect(jsonPath(\"$[0].password\").doesNotExist())\n    .andExpect(jsonPath(\"$[0].id\").isNumber())\n    .andExpect(jsonPath(\"$\").isArray())\n    .andExpect(jsonPath(\"$[0].name\", containsString(\"Ив\")))\n    .andExpect(jsonPath(\"$[0].age\", greaterThan(18)));\n```\n\n### Получение и обработка результата\n\n```java\nMvcResult result = mockMvc.perform(get(\"\u002Fapi\u002Fusers\"))\n    .andExpect(status().isOk())\n    .andDo(print())  \u002F\u002F выводит детали запроса\u002Fответа в консоль\n    .andReturn();\n\nString json = result.getResponse().getContentAsString();\nList\u003CUserDto> users = objectMapper.readValue(json,\n    new TypeReference\u003CList\u003CUserDto>>() {});\nassertEquals(2, users.size());\n```\n\n> **На собеседовании:** покажите, что знаете три основных метода: `perform` (выполнение), `andExpect` (проверка), `andReturn` (получение результата). Частая ошибка — забыть про `jsonPath` и пытаться десериализовать ответ вручную для каждой проверки.","","middle",[7],[],null,{"title":18,"description":19,"ogTitle":18,"ogDescription":19,"keywords":20,"schemaAnswer":19,"featuredSnippetReady":21},"Как выполнять запросы и проверять результаты в MockMvc? — Gymterview","`MockMvc` предоставляет DSL для выполнения HTTP-запросов и проверки ответов без запуска реального сервера.",[7,13],true]