我想要部分嘲笑Httpsession
但为此我需要监视它而不是嘲笑它,并且如果没有已经被嘲笑的请求对象,我就无法获得它的接口。
请帮忙。
换句话说,我怎样才能得到一个对象HttpSession
没有HttpServletRequest
object.
更多详情::
我想测试一个servlet,servlet有会话并将“loginBean”(其中包含登录的用户相关信息)放入会话内,我已经模拟了它并且工作正常,现在在GUI级别,有2个选项卡,DetailSet1, detailsSet2,当你输入DetailSet1的数据时,它会保存在session中并执行一些业务逻辑,现在来到DetailsSet2,你已经在session中拥有了DetailSet1,所以它得到了它所需要的一切,数据保存在DB中。不,很明显我必须嘲笑HttpSession
因为我从容器外部运行单元案例,但存储的数据也在Httpsession
,如果我也嘲笑这些,那就违背了测试的目的。回到我开始的地方,我需要Httpsession
对象返回我模拟的模拟数据,并且它应该像任何正常的行为一样HttpSession
其他情况的对象。就像,如果我这样做 session.setAttribute("name","Vivek) ,那么session.getAttribute("name")
should return "Vivek"
之后,但如果是模拟对象,它会返回null
为什么?因为我没有嘲笑过行为getAttribute("name")
。如果我仍然无法让任何人理解我的要求,我真的很抱歉。
简而言之,部分嘲笑HttpSession
.
好的我明白了。您实际上无权访问真正的会话对象,并且您不会进行任何间谍活动。你需要你自制的模拟(假的):
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());
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)