Spring 3.0 junit test DispatcherServlet
-
27-10-2019 - |
Pregunta
Estoy intentando probar mi aplicación con junit.
Por lo tanto, configuré la siguiente clase:
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = "/META-INF/spring/applicationContext-test.xml" )
@TransactionConfiguration
@Transactional
public class DispatcherServletTest extends AbstractJUnit4SpringContextTests {
private MockHttpServletRequest request;
private MockHttpServletResponse response;
private DispatcherServlet dispatcher;
@Before
public void setUp() throws Exception {
request = new MockHttpServletRequest();
response = new MockHttpServletResponse();
MockServletConfig config = new MockServletConfig("myapp");
config.addInitParameter("contextConfigLocation","classpath*:webmvc-config.xml");
dispatcher = new DispatcherServlet();
dispatcher.init(config);
}
//test cases
}
Entonces, el problema es que parece que mi servlet de despachador no puede enviar ninguna solicitud a ninguno de mis controladores.
Creo que hay algo con la configuración: contextConfigurationLocation. Parece que puede encontrar el archivo (de lo contrario, generaría una excepción), pero no carga ninguna configuración
El registrador dice:
org.springframework.web.servlet.PageNotFound: no se encontró ninguna asignación para la solicitud HTTP con URI [http:// localhost: 8080 / myapp / abc]
Pero no tengo ni idea de lo que está mal ...
¡Agradecería cualquier ayuda!
Gracias de antemano
Solución
Las minas funcionan bien, pruebe los siguientes ajustes.
- si estás usando Junit4, no necesitas extender tu clase de prueba, el corredor de junit debería hacer el truco
-
Cargue la configuración de contexto a través de classpath y asegúrese de que sea accesible desde la classpath de prueba
@ContextConfiguration(locations={"classpath:applicationContext-test.xml"})
-
luego simplemente pruebe los controladores anotados.Lo hago así:
@Test @Transactional public void testAnnotatedListUser() throws Exception { MockHttpServletRequest request = new MockHttpServletRequest(); MockHttpServletResponse response = new MockHttpServletResponse(); AnnotationMethodHandlerAdapter handlerAdpt = new AnnotationMethodHandlerAdapter(); request.setRequestURI("/you/URIhere"); ModelAndView mav = handlerAdpt.handle(request, response, this.controller); assertEquals("Incorrect view name returned", "myexpectedviewname", mav.getViewName()); }
Otros consejos
Hay varios problemas en mi pregunta:
Al principio, no es posible extender AbstractJUnit4SpringContextTests y usar @RunWith (...), porque es lo mismo.
En segundo lugar, no debe usar el dispatcherServlert, sino un Handler definiendo el controlador en su application.xml y conectándolo automáticamente en el caso de prueba a través del controlador de Handler privado @Autowire ...
¡Entonces todo debería funcionar bien!