【问题标题】:JUnit test for servlet, when use HttpSession使用 HttpSession 时对 servlet 进行 JUnit 测试
【发布时间】:2021-04-26 21:04:32
【问题描述】:

我有这个 doPost 方法:

@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) {

    response.setContentType("text/html");
    try {
        HttpSession session = request.getSession();
        synchronized (session) {
            Class.forName("org.postgresql.Driver");
            DataSource storage = DataSource.getInstance();
            if (session.getAttribute("role").toString().equals("admin")) {
                storage.update(request.getParameter("name"), request.getParameter("email"), request.getParameter("createDate"), request.getParameter("login"), request.getParameter("password"), request.getParameter("role"));
            } else if(session.getAttribute("role").toString().equals("user")) {
                storage.updateByUser(request.getParameter("name"), request.getParameter("email"), request.getParameter("createDate"), session.getAttribute("login").toString());
            }
            response.sendRedirect(String.format("%s/editUser", request.getContextPath()));
        }
    } catch (Exception e) {
        e.printStackTrace();
    }
}

我有这个测试:

@Test
public void editUser() throws SQLException {

    ServletEditUser servlet = new ServletEditUser();
    HttpServletRequest request = mock(HttpServletRequest.class);
    HttpServletResponse response = mock(HttpServletResponse.class);
    DataSource.getInstance().add("test", "test", "test", "test", "test", "admin");

    when(request.getParameter("role")).thenReturn("admin");
    when(request.getParameter("login")).thenReturn("test");
    when(request.getParameter("name")).thenReturn("edit");
    when(request.getParameter("createDate")).thenReturn("edit");
    when(request.getParameter("password")).thenReturn("edit");

    servlet.doPost(request, response);
    List<User> users = DataSource.getInstance().getList();
    assertThat(DataSource.getInstance().getList().get(users.size() - 1).getName(), is("edit"));
}

我不明白,我应该如何测试我的 doPost 方法。我应该如何在 JUnit 测试中为 session 设置属性?

回答:

在JUnit测试中,需要添加:

HttpSession session = mock(HttpSession.class);
when(request.getSession()).thenReturn(session);
when(request.getSession().getAttribute("role")).thenReturn("admin");

【问题讨论】:

  • 请告诉我,同步的地方我应该使用什么?
  • @AntonSerdyuchenko 可能最好在 HttpSessionListener 的帮助下防止会话锁定
  • @CowboyFarnz 谢谢,我会试试 HttpSessionListener。

标签: java servlets junit mockito httpsession


【解决方案1】:

在JUnit测试中,需要添加:

HttpSession session = mock(HttpSession.class);
when(request.getSession()).thenReturn(session);
when(request.getSession().getAttribute("role")).thenReturn("admin");

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-10-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-12
    相关资源
    最近更新 更多