Интеграционное тестирование Размещение всего объекта на контроллере Spring MVC

Есть ли способ передать весь объект формы по пробному запросу при интеграционном тестировании веб-приложения Spring mvc? Все, что я могу найти, - это передать каждое поле отдельно в качестве параметра:

mockMvc.perform(post("/somehwere/new").param("items[0].value","value"));

Что хорошо для маленьких форм. Но что если мой опубликованный объект станет больше? Кроме того, тестовый код выглядит лучше, если я могу просто опубликовать весь объект.

В частности, я хотел бы проверить выбор нескольких элементов с помощью флажка, а затем опубликовать их. Конечно, я мог просто протестировать публикацию одного предмета, но мне было интересно ...

Мы используем spring 3.2.2 с включенным spring-test-mvc.

Моя модель для формы выглядит примерно так:

NewObject {
    List<Item> selection;
}

Я пробовал звонки, как это:

mockMvc.perform(post("/somehwere/new").requestAttr("newObject", newObject) 

к контроллеру, как это:

@Controller
@RequestMapping(value = "/somewhere/new")
public class SomewhereController {

    @RequestMapping(method = RequestMethod.POST)
    public String post(
            @ModelAttribute("newObject") NewObject newObject) {
        // ...
    }

Но объект будет пустым (да, я заполнил его раньше в тесте)

Единственное рабочее решение, которое я нашел, было использовать @SessionAttribute, например так:Интеграционное тестирование приложений Spring MVC: формы

Но мне не нравится идея, что нужно помнить, что нужно завершить вызов в конце каждого контроллера, где мне это нужно. После того, как все данные формы не должны находиться внутри сеанса, мне нужен только один запрос.

Поэтому единственное, о чем я могу подумать сейчас, - это написать некоторый класс Util, который использует MockHttpServletRequestBuilder для добавления всех полей объекта в виде .param с использованием отражений или индивидуально для каждого теста.

Я не знаю, чувствовал себя не интуитивно ..

Любые мысли / идеи о том, как я могу сделать мою любовь проще? (Кроме прямого вызова контроллера)

Спасибо!

Ответы на вопрос(7)

Ваш ответ на вопрос