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

How to mention the localhost in android -

php - Calling a template part from a post -

c# - String.format() DateTime With Arabic culture -