Spring @PathVariable интеграционный тест - PullRequest
0 голосов
/ 10 марта 2012

Я пытаюсь написать интеграционный тест для одного из моих методов, который обрабатывает отправку формы.Проблема в том, что я использую @PathVariable int id в @RequestMapping моего контроллера.Когда мой метод проверки достигает части .handle (), я получаю следующее сообщение об ошибке.

nested exception is java.lang.IllegalStateException: Could not find @PathVariable [id] in @RequestMapping

Таким образом, контроллер не может достичь идентификатора.Я использую request.setRequestURI("/url-" + s.getId()); Но, очевидно, это не помогает с настройкой @PathVariable.Есть ли способ настроить @PathVariable моего объекта Mock?

Обновление:

Да, я использую MockHttpServletRequest и annotationMethodHandlerAdapter.handle в моем тестовом классе.

Контроллер:

@RequestMapping(method = RequestMethod.POST, params = {"edit" })    
public String onSubmit(@ModelAttribute("sceneryEditForm") SceneryEditForm s,
            @PathVariable int id, Model model) {
       // some code that useing id
}

Метод испытаний:

@Test
public void testEditButton() throws Exception {
        MyObject s = new MyObject();
        request.setMethod("POST");
        request.setRequestURI("/edit-" + s.getId());
        request.setParameter("edit", "set");
        final ModelAndView mav = new AnnotationMethodHandlerAdapter()
                                       .handle(request, response, controller);  
        assertViewName(mav, "redirect:/view-" + s.getId()); 
    }

1 Ответ

1 голос
/ 10 марта 2012

Ошибка правильная: нет переменной пути id

Вам необходимо добавить выражение пути с заполнителем id

@RequestMapping(value = "/something/{id}",
                method = RequestMethod.POST,
                params = {"edit" })
public String onSubmit(@ModelAttribute("sceneryEditForm") SceneryEditForm s,
        @PathVariable int id, Model model) {
   // some code that useing id
}
...