java - Testing Spring managed servlet -
i need test servlet, working fine now.
the servlet needs use spring service, modified way:
springbeanautowiringsupport.processinjectionbasedonservletcontext( this, config.getservletcontext()); // imageservlet.java line 49
after migration spring 4, test broke , throws exception:
java.lang.illegalstateexception: no webapplicationcontext found: no contextloaderlistener registered? @ org.springframework.web.context.support.webapplicationcontextutils. getrequiredwebapplicationcontext(webapplicationcontextutils.java:84) @ org.springframework.web.context.support.springbeanautowiringsupport. processinjectionbasedonservletcontext(springbeanautowiringsupport.java:107) @ package.imageservlet.init(imageservlet.java:49) @ in.nasv.utils.imageservlettest.accessingimageviahttp(imageservlettest.java:45)
here portion of code of imageservlettest:
// prepare servlet instance mockservletconfig config = new mockservletconfig( new mockservletcontextpatched()); imageservlet servlet = new imageservlet(); servlet.init( config ); // imageservlettest, line 45
and patched class (is not patched now):
public class mockservletcontextpatched extends mockservletcontext{ }
what supposed avoid "illegalstateexception: no webapplicationcontext found: no contextloaderlistener registered?" ?
i found solution. clear enough, solution.
now servlet initialization is:
mockservletcontext servletcontext = new mockservletcontextpatched(); mockservletconfig config = new mockservletconfig( servletcontext ); imageservlet servlet = new imageservlet(); classpathxmlapplicationcontext appcontext = new classpathxmlapplicationcontext( "spring-data-app-context.xml" ); defaultlistablebeanfactory dlbf = new defaultlistablebeanfactory(appcontext.getbeanfactory()); genericwebapplicationcontext gwac = new genericwebapplicationcontext(dlbf); servletcontext.setattribute(genericwebapplicationcontext.root_web_application_context_attribute, gwac); gwac.setservletcontext(servletcontext); gwac.refresh(); servlet.init( config );
preparing request , response in standard way:
mockhttpservletresponse response = new mockhttpservletresponse(); url serverurl = new url( propertyextendedservice.getserveraddress(true) ); mockhttpservletrequest request = new mockhttpservletrequest(); request.setrequesturi( "/what-you-want" ); request.setpathinfo( "/" + test_image ); request.setcontenttype("image/jpeg"); request.addheader("accept", "image/jpeg;image/jpg;" );
final step call filter , assert returned values:
servlet.doget( request, response ); assertequals( response.getstatus(), 200 ); // assert want
Comments
Post a Comment