Spring 3.0 junit test DispatcherServlet

烈酒焚心 提交于 2019-12-06 06:09:47

问题


I am trying to test my application with junit.

Therefore I've setup the following class:

@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

}

So the problem is, that it seems that my dispatcher servlet cannot send any request to any of my controllers.

I think that there is something with the configuration - contextConfigurationLocation. It looks like he can find the file (otherwise it would throw an exception) , but doesn't load any configuration

The logger says:

org.springframework.web.servlet.PageNotFound - No mapping found for HTTP request with URI [http://localhost:8080/myapp/abc]

But I have absolutely no idea what's wrong...

I would appreciate any help!

Thanks in advance


回答1:


Mines are working fine, try the following tweaks.

  1. if you're using Junit4 no need to extend you test class, the junit runner should do the trick
  2. Load the context config via classpath, and make sure is accessible from the test classpath

    @ContextConfiguration(locations={"classpath:applicationContext-test.xml"})

  3. then just test the annotated controllers. I do it like this:


    @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());
    }




回答2:


There are several Problems in my question:

At first, it is not possible to extend the AbstractJUnit4SpringContextTests and use @RunWith(...), because it's the same.

At second, you should not use the dispatcherServlert, but an Handler by defining the handler in you application.xml and autowiring it in the test case via @Autowire private Handler handler...

Then everything should work fine!



来源:https://stackoverflow.com/questions/7832701/spring-3-0-junit-test-dispatcherservlet

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!