Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Spring 3.0 junit test DispatcherServlet

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

like image 538
Alexander Avatar asked Nov 13 '22 15:11

Alexander


1 Answers

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

like image 185
maverick Avatar answered Nov 16 '22 15:11

maverick