Reputation: 7238
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
Upvotes: 5
Views: 6663
Reputation: 7238
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!
Upvotes: 0
Reputation: 2345
Mines are working fine, try the following tweaks.
Load the context config via classpath, and make sure is accessible from the test classpath
@ContextConfiguration(locations={"classpath:applicationContext-test.xml"})
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()); }
Upvotes: 1