unit-testing - 如何使用 JUnit 测试我的 servlet

标签 unit-testing testing servlets junit

我已经使用 Java Servlet 创建了一个 Web 系统,现在想进行 JUnit 测试。我的 dataManager 只是将其提交到数据库的一段基本代码。您将如何使用 JUnit 测试 Servlet?

我的代码示例允许用户注册/注册,它是通过 AJAX 从我的主页提交的:

public void doPost(HttpServletRequest request, HttpServletResponse response) 
         throws ServletException, IOException{

    // Get parameters
    String userName = request.getParameter("username");
    String password = request.getParameter("password");
    String name = request.getParameter("name");

    try {

        // Load the database driver
        Class.forName("com.mysql.jdbc.Driver");

        //pass reg details to datamanager       
        dataManager = new DataManager();
        //store result as string
        String result = dataManager.register(userName, password, name);

        //set response to html + no cache
        response.setContentType("text/html");
        response.setHeader("Cache-Control", "no-cache");
        //send response with register result
        response.getWriter().write(result);

    } catch(Exception e){
        System.out.println("Exception is :" + e);
    }  
}

最佳答案

您可以使用 Mockito 执行此操作要让模拟返回正确的参数,验证它们确实被调用(可选择指定次数),写入“结果”并验证它是否正确。

import static org.junit.Assert.*;
import static org.mockito.Mockito.*;
import java.io.*;
import javax.servlet.http.*;
import org.apache.commons.io.FileUtils;
import org.junit.Test;

public class TestMyServlet extends Mockito{

    @Test
    public void testServlet() throws Exception {
        HttpServletRequest request = mock(HttpServletRequest.class);       
        HttpServletResponse response = mock(HttpServletResponse.class);    

        when(request.getParameter("username")).thenReturn("me");
        when(request.getParameter("password")).thenReturn("secret");

        StringWriter stringWriter = new StringWriter();
        PrintWriter writer = new PrintWriter(stringWriter);
        when(response.getWriter()).thenReturn(writer);

        new MyServlet().doPost(request, response);

        verify(request, atLeast(1)).getParameter("username"); // only if you want to verify username was called...
        writer.flush(); // it may not have been flushed yet...
        assertTrue(stringWriter.toString().contains("My expected string"));
    }
}

关于unit-testing - 如何使用 JUnit 测试我的 servlet,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5434419/

相关文章:

javascript - Karma 测试运行器中的全局变量

python - 我应该在 docker build 期间运行测试吗?

java - 使用 Java 检索 URL 中的参数

java - 从 servlet 返回 JSONObject 抛出异常

java - 覆盖 JSP servlet(过滤器 "*.jsp")以包装在身份验证模型中

c# - Blazor 测试 InputDate 与 bUnit 的绑定(bind)

unit-testing - Mocked 方法调用中的参数计数不匹配

javascript - 在Sinon中假调用具有特定参数的函数

performance - 当响应仅包含单个值时提取响应

performance - 如何提取URL中传递的值并将其用作Jmeter中的参数?