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

Foi útil?

Solução

As minas estão funcionando bem, tente os seguintes ajustes.

  1. se você estiver usando o Junit4, não há necessidade de estender sua classe de teste, o corredor junit deve resolver
  2. 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"})

  3. 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!

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top