如何使EasyMock与HttpSession一起使用。我正在执行以下操作:
System.out.println("begin");
HttpServletRequest request = createMock(HttpServletRequest.class);
expect(request.getParameter("firstName")).andReturn("o");
expect(request.getAttribute("lastName")).andReturn("g");
request.setAttribute("lastName", "g");
HttpSession session = createMock(HttpSession.class);
expect(session.getAttribute("testAttribute")).andReturn("testValue");
session.setAttribute("testAttribute", "testValue"); //appears to not matter
replay(request);
replay(session);
System.out.println("param: "+request.getParameter("firstName"));
System.out.println("attribute: "+request.getAttribute("lastName"));
System.out.println("before session");
if(session.getAttribute("testAttribute")!=null){
System.out.println("fired session");
System.out.println((String)session.getAttribute("testAttribute"));
}
System.out.println("after session");
System.out.println("end");
以下是我的输出:
开始
参数:o
属性:g
会议之前
被解雇的会议
任何帮助将不胜感激!先感谢您
最佳答案
您的问题措辞很差,并且代码示例与通常使用模拟的方式相距甚远。但是,鉴于怀疑的好处,我假设您想知道为什么您的测试没有通过if
块。
实质上是因为您两次调用session.getAttribute("testAttribute")
,但是只期望一次。
因此,您具有以下期望:
expect(session.getAttribute("testAttribute")).andReturn("testValue");
但是,那么您有以下代码块:
if(session.getAttribute("testAttribute")!=null){
System.out.println("fired session");
System.out.println((String)session.getAttribute("testAttribute"));
}
因此,您需要两次拨打电话,因为您拨打了两次。有很多方法可以做到这一点。以下任何一项都可以工作:
使用
times(int)
方法。使用
anyTimes()
方法。多次调用期望。
这是每个选项的示例。
1. expect(session.getAttribute("testAttribute")).andReturn("testValue").times(2);
2. expect(session.getAttribute("testAttribute")).andReturn("testValue").anyTimes();
3. expect(session.getAttribute("testAttribute")).andReturn("testValue");
expect(session.getAttribute("testAttribute")).andReturn("testValue");
关于java - EasyMock处理HttpSession,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20109435/