gpt4 book ai didi

java - 无法监视 HttpSession/Mockito

转载 作者:搜寻专家 更新时间:2023-11-01 01:43:10 27 4
gpt4 key购买 nike

我想对 Httpsession 进行部分模拟,但为此我需要监视它而不是模拟它,而且如果没有已经被模拟的请求对象,我就无法获得这个接口(interface)。

请帮忙。

换句话说,如何在没有HttpServletRequest对象的情况下获取HttpSession对象。

更多细节::

有一个我想测试的 servlet,servlet 有 session 并将“loginBean”(包含登录用户相关信息)放入 session 中,我已经模拟过并且工作正常,现在在 GUI 级别,有 2 个选项卡,DetailSet1,detailsS​​et2,当您输入 DetailSet1 的数据时,它会保存在 session 中并执行一些业务逻辑,现在谈到 DetailsS​​et2,您在 session 中已经有了 DetailSet1,所以它得到了所需的一切,数据保存在数据库中。不,很明显我必须模拟 HttpSession 因为我从容器外部运行单元案例,但是存储的数据也在 Httpsession 中,如果我也模拟它们,它违背了测试的目的。回到我开始的地方,我需要 Httpsession 对象来返回我模拟的模拟数据,并且在其他情况下它应该像任何普通的 HttpSession 对象一样.比如,如果我执行 session.setAttribute("name","Vivek) ,那么 session.getAttribute("name") 之后应该返回 "Vivek" ,但是在模拟对象的情况下它返回 null 为什么?因为我还没有模拟 getAttribute("name") 的行为。如果我仍然无法做到,我真的很抱歉任何人都明白我的要求。

简单来说,部分模拟 HttpSession

最佳答案

好的,我明白了。您实际上无权访问真实的 session 对象,也不会进行任何 spy Activity 。你需要你自制的模型(假的):

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());

关于java - 无法监视 HttpSession/Mockito,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22707031/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com