Czy istnieje sposób na przesłanie całego obiektu formularza na żądanie próbne podczas testowania integracji aplikacji internetowej Spring MVC? Wszystko, co mogę znaleźć, to przekazać każde pole osobno jako parametr podobny do tego:Testowanie integracyjne WPROWADZENIE całego obiektu do kontrolera Spring MVC
mockMvc.perform(post("/somehwere/new").param("items[0].value","value"));
Co jest dobre dla małych formularzy. Ale co, jeśli mój opublikowany obiekt stanie się większy? Również sprawia, że kod testowy wygląda ładniej, jeśli mogę po prostu umieścić cały obiekt.
W szczególności chciałbym przetestować wybór wielu przedmiotów za pomocą pola wyboru, a następnie opublikować je. Oczywiście mogłem po prostu przetestować wysłanie pojedynczego przedmiotu, ale zastanawiałem się.
Używamy sprężyny 3.2.2 z dołączonym testem sprężynowym-mvc.
Moja Wzór formularza wyglądać tak:
NewObject {
List<Item> selection;
}
próbowałam połączenia tak:
mockMvc.perform(post("/somehwere/new").requestAttr("newObject", newObject)
do kontrolera jak ten:
@Controller
@RequestMapping(value = "/somewhere/new")
public class SomewhereController {
@RequestMapping(method = RequestMethod.POST)
public String post(
@ModelAttribute("newObject") NewObject newObject) {
// ...
}
Ale obiekt będzie pusty (tak, wypełniłem go wcześniej w teście)
Rozwiązanie działa tylko znalazłem używał @SessionAttribute tak: Integration Testing of Spring MVC Applications: Forms
Ale ja lubię ideę konieczności pamiętania zadzwonić zakończona pod koniec każdego kontrolera, gdzie potrzebują tego. Po tym, jak wszystkie dane formularza nie muszą znajdować się w sesji, potrzebuję go tylko na jedno żądanie.
Więc jedyne co mogę myśleć teraz jest napisać jakąś klasę Util który używa MockHttpServletRequestBuilder dołączyć wszystkie pola obiektów jak .param użyciu odbicia lub indywidualnie dla każdego przypadku testowego ..
I don” Wiem, czuć się nieintuicyjnie ..
Jakieś przemyślenia/pomysły na to, w jaki sposób mogę ułatwić moje życie? (Poza bezpośrednim wywołaniem kontrolera)
Dzięki!
spróbuj użyć gson i przekonwertować obiekt na json i opublikować go? – DarthCoder
jak to pomoże? Mój formularz opublikuje dane "MediaType.APPLICATION_FORM_URLENCODED", więc mój test powinien wysłać te dane. Próbowałem nawet konwertować z linku, który wysyłam pocztą bajtową [] do kontrolera, ale nadal go nie odbierze .. – Pete