关于java:Struts2.3.12 junit4测试用例请求

Struts2.3.12 junit4 testcase request & session are null

我已经通过了以下解决方案:
Struts 2 JUnit插件v2.2.3:扩展StrutsTestCase的测试类; 'request'为null

但是我已经没有struts2-spring插件,也没有在应用程序中使用spring。

我有3个测试用例,其中2个在请求为null时失败,一个在会话为null时失败

第一个Stacktrace

1
2
3
4
5
6
java.lang.NullPointerException
    at org.apache.struts2.interceptor.MessageStoreInterceptor.before(MessageStoreInterceptor.java:228)
    at org.apache.struts2.interceptor.MessageStoreInterceptor.intercept(MessageStoreInterceptor.java:193)
    at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
    at org.apache.struts2.impl.StrutsActionProxy.execute(StrutsActionProxy.java:54)
    at actions.TestIoOptimizationAction.login(TestIoOptimizationAction.java:29)

对应于

1
            Collection actionErrors = (Collection) session.get(actionErrorsSessionKey);

第二


如果使用getActionProxy方法执行操作,则需要在调用上下文中设置新的会话映射。

1
2
3
4
ActionProxy actionProxy = getActionProxy("/action");
Map<String, Object> sessionMap = new HashMap<String, Object>();
actionProxy.getInvocation().getInvocationContext().setSession(sessionMap);
actionProxy.execute();

如果不需要引用动作代理,则可以使用executeAction方法。请注意,executeAction将返回结果的实际输出,而不是从execute方法返回的结果。


在我的情况下,我需要从测试中调用super.setUp


为避免request为空:

1
request = new MockHttpServletRequest();

对于会话:

1
2
Map<String, Object> sessionMap = new HashMap<String, Object>();
actionProxy.getInvocation().getInvocationContext().setSession(sessionMap);