Wicket测试:对HttpSession

时间:2015-08-21 12:20:51

标签: java jsp unit-testing wicket

我在基于Wicket的应用程序的http会话中有以下代码:

public static HttpServletRequest getHttpServletRequest() {
Request request = RequestCycle.get().getRequest();
if (request != null && request instanceof WebRequest) return
HttpServletRequest) request.getContainerRequest();
return null;
}
public static SessionObject getSessionObject() {
HttpServletRequest request = getHttpServletRequest();
HttpSession session = request == null ? null : request.getSession();
SessionObject so = session == null ? null : (SessionObject) session.getAttribute("so");
if (so == null) {
logger.warn("SessionObject is not found in HttpSession!");
}
return so;
}

会话对象在jsp中初始化,如下所示:

jsp:useBean id="so" class="package.SessionObject" scope="session"

我想把这个属性所以模仿到Wicket测试中 试图做以下事情:

bind(SessionObject.class).toInstance(EasyMock.createMock(SessionObject.class));

tester = new WicketTester(new MockApplication() {
@Override
public Session newSession(Request request, Response response) {
final Session session = super.newSession(request, response);
session.setAttribute("so", EasyMock.createMock(SessionObject.class));
return session;
}
});

但是当我尝试将方法称为:

init(){
a = getSessionObject().getA();
}

getSessionObject()返回null,因为没有名为“so”的属性。

你可以帮助我把这个属性模拟到会话中吗?

1 个答案:

答案 0 :(得分:0)

您可以将辅助方法简化为:Session.get().getAttribute("so")

您编写值的代码已使用Session#setAttribute()

尝试绑定会话:Session#bind()。除非绑定Wicket将为每个请求创建一个新的Session实例。一旦绑定,Wicket将获得HttpSession并将Wicket的Session存入其中(作为属性)。

如果这没有帮助,那么在Session set / getAttribute()方法中放置一个断点,看看会发生什么。