java - How to get an ActionContext from Struts 2 during acceptance tests? -


i writing acceptance tests (testing behavior) using cucumber-jvm, on application struts 2 , tomcat servlet container. @ point in code, need fetch user struts 2 httpsession, created httpservletrequest.

since i'm doing tests , not running tomcat, don't have active session , nullpointerexception.

here's code need call:

public final static getactiveuser() {     return (user) getsession().getattribute("active_user"); } 

and getsession method:

public final static httpsession getsession() {     final httpservletrequest request (httpservletrequest)actioncontext.                           getcontext().get(strutsstatics.http_request);     return request.getsession(); } 

in honesty, don't know struts 2, need little help. i've been looking @ cucumber-jvm embedded tomcat example, i'm struggling understand.

i've been looking @ struts 2 junit tutorial. sadly, doesn't cover strutstestcase features , it's simplest of use cases (all considered, pretty useless tutorial).

so, how can run acceptance test if user using application?


update:

thanks steven benitez answer!

i had 2 things:

  1. mock httpservletrequest, suggested,
  2. mock httpsession attribute wanted.

here's code i've added cucumber-jvm tests:

public class stepdefs {     user user;     httpservletrequest request;     httpsession session;      @before     public void preparetests() {         // create user          // mock session using mockito         session = mockito.mock(httpsession.class);         mockito.when(session.getattribute("active_user").thenreturn(user);          // mock httpservletrequest         request = mockito.mock(httpservletrequest);         mockito.when(request.getsession()).thenreturn(session);          // set context         map<string, object> contextmap = new hashmap<string, object>();         contextmap.put(strutsstatics.http_request, request);         actioncontext.setcontext(new actioncontext(contextmap));     }      @after     public void destroytests() {         user = null;         request = null;         session = null;         actioncontext.setcontext(null);     } 

}

an actioncontext per-request object represents context in action executes. static methods getcontext() , setcontext(actioncontext context) backed threadlocal. in case, can call before test:

map<string, object> contextmap = new hashmap<string, object>(); contextmap.put(strutsstatics.http_request, yourmockhttpservletrequest); actioncontext.setcontext(new actioncontext(contextmap)); 

and clean after with:

actioncontext.setcontext(null); 

this example provide method testing needs. if need additional entries in map based on code didn't provide here, add them accordingly.

hope helps.


Comments

Popular posts from this blog

php - Calling a template part from a post -

Firefox SVG shape not printing when it has stroke -

How to mention the localhost in android -