【发布时间】:2014-04-10 08:13:11
【问题描述】:
有一个我想测试的 servlet,servlet 有会话并将“loginBean”(包含登录用户相关信息)放入会话中,我已经模拟并且工作正常,现在在 GUI 级别,有 2 个选项卡, DetailSet1 , detailsSet2 ,当你输入 DetailSet1 的数据时,它会保存在 session 中,并且还会执行一些业务逻辑,现在谈到 DetailsSet2 ,你已经在 session 中有 DetailSet1 ,所以它得到了它所需要的一切,数据保存在 DB 中。现在很明显我必须模拟 HttpSession 因为我从容器外部运行单元案例,但是存储的数据也在 HttpSession 中,如果我也模拟这些,它就违背了测试的目的。所以我的问题是,我需要 HttpSession 对象来为我模拟它的对象返回模拟数据,并且假设在其他情况下它的行为就像任何普通的 HttpSession 对象一样。就像,如果代码是 session.setAttribute("name","Vivek") ,那么 session.getAttribute("name") 应该在那之后返回“Vivek”,但是如果是模拟对象,它返回“NULL”,为什么?因为我没有嘲笑“getAttribute("name") 的行为。
简而言之,对 HttpSession 或接口进行部分模拟。
【问题讨论】:
-
PS,我也尝试过 ServletUnit,但我不想根据返回的 HTML 进行测试,而且 JS 支持很差。我必须嘲笑它。许多应用程序使用 HttpSession 并在其中设置一些值并从其他控制器方法中读取它。我想说的是,对我来说,这似乎很常见,但很难得到答案,我之前没有做过 Junit 测试,但我得到了答案,我会在许多博客中发布解决方案。请帮忙。
标签: java unit-testing junit mockito