Ich habe einen Spring MVC-Controller, die Paginierung Unterstützung von Spring-Daten verwendet:Isolieren Controller-Test kann Pageable nicht instanziiert
@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;
}
}
Und ich mag das RequestMapping testen Sie die schöne Spring MVC Testunterstützung verwenden. Um diese Tests schnell und isoliert von allen anderen Sachen los zu halten, möchte ich nicht die komplette Application erstellen:
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());
}
}
Dieser Ansatz funktioniert gut mit anderen Controllern, die eine Pageable nicht erwarten, aber mit diesem bekomme ich einen dieser schönen langen Spring Stacktraces. Sie wirft in der Lage, über nicht Pageable zu instanziiert:
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
Frage: Wie kann ich meinen Test ändern, damit die Magie No-Request-Parameter-To-Pageable Umwandlung ordnungsgemäß geschieht?
Hinweis: In der tatsächlichen Anwendung funktioniert alles gut.
Das ist so gut! –
Ich habe meiner Testklasse die Anmerkung "@ EnableSpringDataWebSupport" hinzugefügt, aber dies hatte keine Auswirkungen. Könntest du etwas mehr darüber sagen, wie das funktionieren soll? -1 für jetzt –