Test unitaire d'un Controller Spring
Bonsoir,
j'ai un problème sur l’exécution des tests unitaires des Controllers. je n'arrive pas à avoir le résultat attendu, à chaque execution, j'ai l'erreur : java.lang.AssertionError: No ModelAndView found.
Ci-joint les différents fichiers utilisés,
pour information, je n'ai aucun problème au chargement du contexte dans les TU de la partie persistance et service. pour le moment, je n'ai arrivé à exécuter aucun test sur la partie Controller :)
Merci par avance,
le code source du controller:
Code:
1 2 3 4 5 6 7 8 9 10 11
|
@Controller
public class LoginController {
@RequestMapping(value="/loginfailed", method = RequestMethod.GET)
public String loginerror(ModelMap model) {
model.addAttribute("error", "true");
return "accueilLogin";
}
} |
le teste unitaire du controller :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
|
@ContextConfiguration(locations = { "classpath:/META-INF/applicationContext-test.xml" })
@WebAppConfiguration
public class LoginControllerTest extends AbstractJUnit4SpringContextTests {
@Autowired
private WebApplicationContext wac ;
private MockMvc mockMvc;
@Before
public void setup() {
this.mockMvc = webAppContextSetup(this.wac).build();
System.out.println(wac.getBeanDefinitionNames());
}
@Test
public void testLoginFailed() throws Exception {
this.mockMvc.perform(get("/loginfailed")).andDo(print())
.andExpect(view().name("accueilLogin"));
} |
l'application est bien accessible sur localhost:8080/monapplication/logout, et me redirige vers la view accueilLogin.
le fichier de configuration de spring security contient :
Code:
1 2 3 4 5 6 7 8 9 10 11
|
<http >
<intercept-url pattern="/accueilLogin*" access="ROLE_ANONYMOUS, ROLE_USER" />
<intercept-url pattern="/register*" access="ROLE_ANONYMOUS, ROLE_USER" />
<intercept-url pattern="/welcome*" access="ROLE_USER" />
<!-- <intercept-url pattern="/logout*" access="ROLE_USER" /> -->
<form-login login-page="/accueilLogin" default-target-url="/welcome"
authentication-failure-url="/loginfailed" />
<logout logout-success-url="/logout" />
</http> |
et enfin, le fichier web.xml :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
|
<servlet>
<servlet-name>mvc-dispatcher</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>mvc-dispatcher</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>
/WEB-INF/mvc-dispatcher-servlet.xml,
classpath:/META-INF/applicationContext.xml
</param-value>
</context-param>
<!-- Spring Security -->
<filter>
<filter-name>springSecurityFilterChain</filter-name>
<filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
</filter>
<filter-mapping>
<filter-name>springSecurityFilterChain</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping> |
les logs de la request :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
|
MockHttpServletRequest:
HTTP Method = GET
Request URI = /loginfailed
Parameters = {}
Headers = {}
Handler:
Type = null
Resolved Exception:
Type = null
ModelAndView:
View name = null
View = null
Model = null
FlashMap:
MockHttpServletResponse:
Status = 404
Error message = null
Headers = {}
Content type = null
Body =
Forwarded URL = null
Redirected URL = null
Cookies = [] |