Интеграционное тестирование Размещение всего объекта на контроллере 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 с использованием отражений или индивидуально для каждого теста.
Я не знаю, чувствовал себя не интуитивно ..
Любые мысли / идеи о том, как я могу сделать мою любовь проще? (Кроме прямого вызова контроллера)
Спасибо!