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) |
对应于
第二
- @AleksandrM发布了测试,请参阅更新的问题。
如果使用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方法返回的结果。
- 有没有getActionProxy的替代方法?
-
我终于使用了getActionProxy()并且会话错误似乎消失了,但是请求错误:String contextPath = ServletActionContext.getRequest().getContextPath();上的NPE仍然存在。
-
我为testView()测试尝试了executeAction和getActionProxy,但是都没有用,都给了NPE请求
-
您可以验证为空吗? ActionContext.getContext()是否返回上下文?也许这是一些拦截器问题。
-
System.out.println(ActionContext.getContext()); System.out.println(executeAction("optimize/view"));-为getContext()打印不为null
-
在html响应中,我看到了NPE,但在Netbeans输出中,我看到了-[2013-10-29 14:50:38.766] [WARN] MockServletContext.getRealPath:298-无法确定资源类路径资源的真实路径[ org / apache / struts2 / dispatcher / error_en_US.ftl] java.io.FileNotFoundException:类路径资源[org / apache / struts2 / dispatcher / error_en_US.ftl]无法解析为URL,因为它不存在
-
请查看更新的问题,它具有完整的堆栈跟踪
-
也许您的操作有错误,请检查获取上下文路径是否导致错误或其他原因。
-
让我们继续聊天中的讨论
在我的情况下,我需要从测试中调用super.setUp。
为避免request为空:
1
| request = new MockHttpServletRequest(); |
对于会话:
1 2
| Map <String, Object > sessionMap = new HashMap <String, Object >();
actionProxy. getInvocation(). getInvocationContext(). setSession(sessionMap ); |