spring mvc - que - Prueba de controlador aislado no puede crear una instancia de Pageable
validaciones en spring mvc (2)
El problema con la posibilidad de paginación se puede resolver proporcionando un manejador de argumentos personalizado. Si esto está configurado, se ejecutará en una excepción ViewResolver (loop). Para evitar esto, debe configurar un ViewResolver (una clase JSON ViewResolver anónima, por ejemplo).
mockMvc = MockMvcBuilders.standaloneSetup(controller)
.setCustomArgumentResolvers(new PageableHandlerMethodArgumentResolver())
.setViewResolvers(new ViewResolver() {
@Override
public View resolveViewName(String viewName, Locale locale) throws Exception {
return new MappingJackson2JsonView();
}
})
.build();
Tengo un controlador Spring MVC que utiliza el soporte de paginación de Spring-Data:
@Controller
public class ModelController {
private static final int DEFAULT_PAGE_SIZE = 50;
@RequestMapping(value = "/models", method = RequestMethod.GET)
public Page<Model> showModels(@PageableDefault(size = DEFAULT_PAGE_SIZE) Pageable pageable, @RequestParam(
required = false) String modelKey) {
//..
return models;
}
}
Y me gustaría probar RequestMapping con el buen Spring Test MVC Test Support. Para mantener estas pruebas rápidas y aisladas de todo lo demás, no quiero crear el ApplicationContext completo:
public class ModelControllerWebTest {
private MockMvc mockMvc;
@Before
public void setup() {
ModelController controller = new ModelController();
mockMvc = MockMvcBuilders.standaloneSetup(controller).build();
}
@Test
public void reactsOnGetRequest() throws Exception {
mockMvc.perform(get("/models")).andExpect(status().isOk());
}
}
Este enfoque funciona bien con otros Controladores, que no esperan una página, pero con este obtengo uno de estos lindos seguimientos de pila de Primavera. Se queja de que no se puede crear una instancia de Pageable:
org.springframework.web.util.NestedServletException: Request processing failed; nested exception is org.springframework.beans.BeanInstantiationException: Could not instantiate bean class [org.springframework.data.domain.Pageable]: Specified class is an interface
at
.... lots more lines
Pregunta: ¿Cómo cambio mi prueba para que la conversión mágica No-Solicitud-Parámetro-Para-paginación ocurra correctamente?
Nota: en la aplicación real, todo funciona bien.
Simplemente agregue @EnableSpringDataWebSupport para la prueba. Eso es.