Spring mvc test - testing controllers with Autowired annotations -
i trying create tests controllers using spring test framework.
following article: http://blog.springsource.org/2012/11/12/spring-framework-3-2-rc1-spring-mvc-test-framework/ created test class
@runwith(springjunit4classrunner.class) @webappconfiguration @contextconfiguration("classpath:testcontext.xml") public class servicerequestcontrollertest { @autowired private webapplicationcontext wac; @autowired private servicerequestcontroller productcontroller; @autowired private wsservicerequestio wsservicerequestio; @autowired private open311responsemarshaller open311responsemarshaller; @autowired private open311getquerystringparser open311getquerystringparser; @autowired private open311postquerystringparser open311postrequestparser; @autowired private open311responsefactory responsefactory; private mockmvc mockmvc; @before public void setup() { this.mockmvc = mockmvcbuilders.webappcontextsetup(this.wac).build(); } @test public void testtest() throws exception { this.mockmvc.perform(get("/requests")); } } and testcontext.xml
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:context="http://www.springframework.org/schema/context" xmlns:xsi="http://www.w3.org/2001/xmlschema-instance" xmlns:mvc="http://www.springframework.org/schema/mvc" xsi:schemalocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.2.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.2.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd"> <bean class="org.mockito.mockito" factory-method="mock"> <constructor-arg value="utils.webservice.wsservicerequestio" /> </bean> <bean class="org.mockito.mockito" factory-method="mock"> <constructor-arg value="open311.model.open311responsemarshaller" /> </bean> <bean class="org.mockito.mockito" factory-method="mock"> <constructor-arg value="open311.utils.open311postquerystringparser" /> </bean> <bean class="org.mockito.mockito" factory-method="mock"> <constructor-arg value="open311.utils.open311getquerystringparser" /> </bean> <bean class="org.mockito.mockito" factory-method="mock"> <constructor-arg value="open311.model.open311responsefactory" /> </bean> <context:component-scan base-package="open311.controller" /> <mvc:annotation-driven /> <mvc:resources mapping="/services*" location="/resources/" /> </beans> now, when run tests lot of messages like:
2013-04-19 14:33:34 info generictyperesolver:216 - not determine target type type argument [t] method [public static <t> t org.mockito.mockito.mock(java.lang.class<t>)]. so there problem inferring types mockito, still when enter debug mode , inspect controller can see objects injected correctly. (i using @autowire annotation in controller).
anyway, when try run test getting test failure because of
org.springframework.web.util.nestedservletexception: handler processing failed; nested exception java.lang.nosuchmethoderror: javax/servlet/http/httpservletresponse.getcontenttype()ljava/lang/string; @ org.springframework.web.servlet.dispatcherservlet.triggeraftercompletionwitherror(dispatcherservlet.java:1259) @ org.springframework.web.servlet.dispatcherservlet.dodispatch(dispatcherservlet.java:945) @ org.springframework.web.servlet.dispatcherservlet.doservice(dispatcherservlet.java:856) @ org.springframework.web.servlet.frameworkservlet.processrequest(frameworkservlet.java:920) @ org.springframework.web.servlet.frameworkservlet.doget(frameworkservlet.java:816) @ javax.servlet.http.httpservlet.service(httpservlet.java:740) @ org.springframework.web.servlet.frameworkservlet.service(frameworkservlet.java:801) @ org.springframework.test.web.servlet.testdispatcherservlet.service(testdispatcherservlet.java:66) @ javax.servlet.http.httpservlet.service(httpservlet.java:853) @ org.springframework.mock.web.mockfilterchain$servletfilterproxy.dofilter(mockfilterchain.java:168) @ org.springframework.mock.web.mockfilterchain.dofilter(mockfilterchain.java:136) @ org.springframework.test.web.servlet.mockmvc.perform(mockmvc.java:134) @ open311.controller.servicerequestcontrollertest.testtest(servicerequestcontrollertest.java:58) @ sun.reflect.nativemethodaccessorimpl.invoke0(native method) @ sun.reflect.nativemethodaccessorimpl.invoke(nativemethodaccessorimpl.java:48) @ sun.reflect.delegatingmethodaccessorimpl.invoke(delegatingmethodaccessorimpl.java:37) @ java.lang.reflect.method.invoke(method.java:600) @ org.junit.runners.model.frameworkmethod$1.runreflectivecall(frameworkmethod.java:47) @ org.junit.internal.runners.model.reflectivecallable.run(reflectivecallable.java:12) @ org.junit.runners.model.frameworkmethod.invokeexplosively(frameworkmethod.java:44) @ org.junit.internal.runners.statements.invokemethod.evaluate(invokemethod.java:17) @ org.junit.internal.runners.statements.runbefores.evaluate(runbefores.java:26) @ org.springframework.test.context.junit4.statements.runbeforetestmethodcallbacks.evaluate(runbeforetestmethodcallbacks.java:74) @ org.springframework.test.context.junit4.statements.runaftertestmethodcallbacks.evaluate(runaftertestmethodcallbacks.java:83) @ org.springframework.test.context.junit4.statements.springrepeat.evaluate(springrepeat.java:72) @ org.springframework.test.context.junit4.springjunit4classrunner.runchild(springjunit4classrunner.java:231) @ org.springframework.test.context.junit4.springjunit4classrunner.runchild(springjunit4classrunner.java:88) @ org.junit.runners.parentrunner$3.run(parentrunner.java:238) @ org.junit.runners.parentrunner$1.schedule(parentrunner.java:63) @ org.junit.runners.parentrunner.runchildren(parentrunner.java:236) @ org.junit.runners.parentrunner.access$000(parentrunner.java:53) @ org.junit.runners.parentrunner$2.evaluate(parentrunner.java:229) @ org.springframework.test.context.junit4.statements.runbeforetestclasscallbacks.evaluate(runbeforetestclasscallbacks.java:61) @ org.springframework.test.context.junit4.statements.runaftertestclasscallbacks.evaluate(runaftertestclasscallbacks.java:71) @ org.junit.runners.parentrunner.run(parentrunner.java:309) @ org.springframework.test.context.junit4.springjunit4classrunner.run(springjunit4classrunner.java:174) @ org.eclipse.jdt.internal.junit4.runner.junit4testreference.run(junit4testreference.java:50) @ org.eclipse.jdt.internal.junit.runner.testexecution.run(testexecution.java:38) @ org.eclipse.jdt.internal.junit.runner.remotetestrunner.runtests(remotetestrunner.java:467) @ org.eclipse.jdt.internal.junit.runner.remotetestrunner.runtests(remotetestrunner.java:683) @ org.eclipse.jdt.internal.junit.runner.remotetestrunner.run(remotetestrunner.java:390) @ org.eclipse.jdt.internal.junit.runner.remotetestrunner.main(remotetestrunner.java:197) what source of problem? think followed every step tutorial.
the nosuchmethoderror indicates have incompatible version of servlet api on test classpath.
also, you'll need include spring mvc configuration bean definition servicerequestcontroller within test xml config, either directly, via import, or declaring separate xml config file via @contextconfiguration.
Comments
Post a Comment