我希望对Httpsession
进行部分嘲讽,但为此我需要窥探而不是嘲笑它,而且这是一个我已经无法获得的请求对象无法获得的接口。
请帮忙。
换句话说,如何在没有HttpSession
对象的情况下获得HttpServletRequest
的对象。
MORE DETAIL ::
我想要测试一个servlet,servlet有会话,并在会话中放入“loginBean”(其中包含用户相关信息),我已经嘲笑过并且工作正常,现在在GUI级别,有2个选项卡,DetailSet1,detailsSet2,当你输入DetailSet1的数据时,它会被保存在会话中并且也会做一些业务逻辑,现在它来到DetailsSet2,你已经在会话中有了DetailSet1,所以它得到了它所需要的一切,数据保存在DB中。不,很明显我必须模拟HttpSession
,因为我从容器外部运行单元格,但是存储的数据也在Httpsession
,如果我也嘲笑那些,它就会破坏测试的目的。回到我开始的时候,我需要Httpsession
对象来返回我模拟过的模拟数据,并且假设对于其他情况,它就像任何正常的HttpSession
对象一样。比如,如果我执行session.setAttribute(“name”,“Vivek”),那么session.getAttribute("name")
之后return "Vivek"
应该null
,但是如果是模拟对象则返回getAttribute("name")
为什么?因为我没有对HttpSession
的嘲笑行为。如果我仍然不能让任何人理解我的要求,我真的很抱歉。
简单地说,{{1}}上的部分嘲弄。
答案 0 :(得分:5)
public class MockHttpSession implements HttpSession {
Map<String, Object> map = new HashMap<>();
@Override
public Object getAttribute(String name) {
return map.get(name);
}
@Override
public void setAttribute(String name, Object value) {
map.put(name, value);
}
// implement rest of the methods you will use
然后在您的测试中,您将拥有:
when(request.getSession()).thenReturn(new MockHttpSession());
答案 1 :(得分:3)
自己实现接口HttpSession(我根据Martin Fowlers bliki中提出的名称命名为FakeHttpSession)。
然后你使用Mockito创建一个实例并监视它。