如何使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/

10-10 11:21