W ramach Spring 3 MVC możliwe jest wstrzyknięcie obiektu aktualnie zalogowanego użytkownika (Zasada) do metody kontrolera.Spring 3 Test integracji sterownika MVC - wstrzyknięcie Principal do metody
E.g.
@Controller
public class MyController {
@RequestMapping(value="/update", method = RequestMethod.POST)
public String update(ModelMap model, Principal principal) {
String name = principal.getName();
... the rest here
}
}
Jest to udokumentowane jako część dokumentacji tutaj Wiosna 3: http://static.springsource.org/spring/docs/3.0.x/spring-framework-reference/html/mvc.html#mvc-ann-requestmapping-arguments.
To działa w kodzie produkcji. Jednak nie wiem, jak to przetestować. Po utworzeniu testu integracji (po skonfigurowaniu kontekstu zabezpieczenia sprężynowego) i wywołaniu metody obsługi kontrolera, wówczas zleceniodawca jest zawsze zerowy!
public class FareTypeControllerIntegrationTest extends SpringTestBase {
@Autowired
private MyController controller;
@Autowired
private AnnotationMethodHandlerAdapter handlerAdapter;
private final MockHttpServletRequest request = new MockHttpServletRequest();
private final MockHttpServletResponse response = new MockHttpServletResponse();
@Test
public void testUpdate() throws Exception {
request.setRequestURI("/update");
request.setMethod(HttpMethod.POST.name());
... setup rest of request
ModelAndView mav = handlerAdapter.handle(request, response, controller);
.. rest of assertions
}
Testy działa poprawnie i wszystko z wyjątkiem Zleceniodawcą jest null.
Wszelkie pomysły?
TIA
Ayub
Próbowałem tego i zadziałało. Całkiem proste i zadbane. Dzięki –