Teste junit Spring 3.0 DispatcherServlet
-
27-10-2019 - |
Pergunta
Estou tentando testar meu aplicativo com o junit.
Portanto, configurei a seguinte classe:
@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
}
Então, o problema é que parece que meu servlet de despachante não pode enviar nenhuma solicitação a nenhum de meus controladores.
Acho que há algo com a configuração - contextConfigurationLocation. Parece que ele pode encontrar o arquivo (caso contrário, ele lançaria uma exceção), mas não carrega nenhuma configuração
O logger diz:
org.springframework.web.servlet.PageNotFound - Nenhum mapeamento encontrado para solicitação HTTP com URI [http:// localhost: 8080 / myapp / abc]
Mas não tenho absolutamente nenhuma ideia do que está errado ...
Eu agradeceria qualquer ajuda!
Agradecemos antecipadamente
Solução
As minas estão funcionando bem, tente os seguintes ajustes.
- se você estiver usando o Junit4, não há necessidade de estender sua classe de teste, o corredor junit deve resolver
-
Carregue a configuração de contexto por meio do classpath e certifique-se de que está acessível a partir do classpath de teste
@ContextConfiguration(locations={"classpath:applicationContext-test.xml"})
-
então, apenas teste os controladores anotados.Eu faço assim:
@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()); }
Outras dicas
Existem vários problemas na minha pergunta:
A princípio, não é possível estender AbstractJUnit4SpringContextTests e usar @RunWith (...), porque é o mesmo.
Em segundo lugar, você não deve usar o dispatcherServlert, mas um Handler, definindo o manipulador em seu application.xml e conectando-o automaticamente no caso de teste via @Autowire private Handler handler ...
Então, tudo deve funcionar bem!