MockMvc не проверяет метод контроллера, использующий приложение/x-www-форма-urlencoded

#java #spring #spring-boot #unit-testing #mockmvc

Вопрос:

Я пишу модульные тесты для своих методов контроллера. MockMvc проверяет все методы, которые требуют параметров запроса или тела JSON. Однако он не проверяет методы контроллера, которые используют приложение/x-www-форма-url, закодированные. Ниже приведен пример:

 @RestController
@RequestMapping("/pools")
@Validated
public class PoolController {
        @PostMapping(value = "/test", consumes = "application/x-www-form-urlencoded")
        public ResponseEntity createPool(@NotBlank(message = "poolName cannot be blank") String poolName) {
            return ResponseEntity.ok().build();
        }
}
 

И в моем модульном тесте

 @Test
public void createPool400() throws Exception {
    mockMvc
      .perform(post("/pools/test")
        .contentType(MediaType.APPLICATION_FORM_URLENCODED))
        //.param("poolName", "test"))
        .andExpect(status().isBadRequest());
}
 

Тест должен вернуть неверный запрос, поскольку параметр имени пула не задан. Если я отлажу метод, он покажет мне, что имя пула может быть пустым или пустым.

Я перепробовал несколько способов передачи данных в MockMvc, таких как:

 .content("poolName="))
 

или

 .content(EntityUtils.toString(new UrlEncodedFormEntity(Arrays.asList(
          new BasicNameValuePair("poolName", (String) null)
        )))))
 

Почему это не подтверждается?