我是jmock的新手,正在尝试模拟HttpSession。我正进入(状态:

java.lang.AssertionError:意外调用:httpServletRequest.getSession()
没有指定期望:您是否...
 -忘记使用基数子句开始期望了吗?
 -调用模拟方法来指定期望参数?

测试方法:

@测试

public void testDoAuthorization(){

    final HttpServletRequest request = context.mock(HttpServletRequest.class);
    final HttpSession session = request.getSession();

    context.checking(new Expectations(){{
       one(request).getSession(true); will(returnValue(session));
   }});

    assertTrue(dwnLoadCel.doAuthorization(session));
}


我已经做了一些搜索,但我仍然不清楚这是如何完成的。感觉就像我缺少了一些小东西。任何有经验的人都可以为我指明正确的方向。
谢谢

最佳答案

您不需要模拟请求对象。由于您要测试的方法(dwnLoadCel.doAuthorization())仅依赖于HttpSession对象,因此应进行模拟。因此,您的代码如下所示:

public void testDoAuthorization(){
    final HttpSession session = context.mock(HttpSession.class);

    context.checking(new Expectations(){{
        // ???
    }});

    assertTrue(dwnLoadCel.doAuthorization(session));


}

问题就变成了:您期望SUT对会话对象实际做什么?您需要在期望中表达对session的调用及其相应的返回值,这些调用应导致doAuthorization返回true

07-25 20:29