servlet 单元测试

写了个Servlet的测试用例,初学单元测试,大家帮我看看。

关键字: servlet 单元测试 mock easymock2 junit4

用的JUnit是4.4版,EasyMock2.3。

这是Servlet:
Java代码 复制代码
  1. package net.javayuan.servlet;   
  2.   
  3. import java.io.IOException;   
  4.   
  5. import javax.servlet.ServletException;   
  6. import javax.servlet.http.HttpServlet;   
  7. import javax.servlet.http.HttpServletRequest;   
  8. import javax.servlet.http.HttpServletResponse;   
  9.   
  10. /**  
  11.  * @(#)LoginServlet.java 2008-6-4 下午11:39:05  
  12.  *   
  13.  * @author Yuan  
  14.  * LoginServlet  
  15.  */  
  16. public class LoginServlet extends HttpServlet {   
  17.   
  18.     /**  
  19.      *   
  20.      */  
  21.     private static final long serialVersionUID = -7068817837964223972L;   
  22.   
  23.     @Override  
  24.     public void doPost(HttpServletRequest request, HttpServletResponse response)   
  25.     throws IOException,ServletException{   
  26.         String username = request.getParameter("username").trim();   
  27.         String password = request.getParameter("password");   
  28.         if ("yuan".equals(username) && "123456".equals(password))   
  29.             response.sendRedirect("welcome.jsp");   
  30.         else  
  31.             response.sendRedirect("error.jsp");   
  32.     }   
  33. }  
package net.javayuan.servlet;

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * @(#)LoginServlet.java 2008-6-4 下午11:39:05
 * 
 * @author Yuan
 * LoginServlet
 */
public class LoginServlet extends HttpServlet {

	/**
	 * 
	 */
	private static final long serialVersionUID = -7068817837964223972L;

	@Override
	public void doPost(HttpServletRequest request, HttpServletResponse response)
	throws IOException,ServletException{
		String username = request.getParameter("username").trim();
		String password = request.getParameter("password");
		if ("yuan".equals(username) && "123456".equals(password))
			response.sendRedirect("welcome.jsp");
		else
			response.sendRedirect("error.jsp");
	}
}


这是Test Case:
Java代码 复制代码
  1. package net.javayuan.servlet;   
  2.   
  3. import static org.easymock.EasyMock.*;   
  4.   
  5. import java.io.IOException;   
  6.   
  7. import org.junit.Test;   
  8. import org.junit.After;   
  9. import org.junit.Before;   
  10.   
  11. import javax.servlet.ServletException;   
  12. import javax.servlet.http.HttpServletRequest;   
  13. import javax.servlet.http.HttpServletResponse;   
  14. /**  
  15.  * @(#)LoginServlet.java 2008-6-5 上午09:19:42  
  16.  *   
  17.  * @author Yuan  
  18.  * LoginServlet Test Case  
  19.  */  
  20. public class LoginServletTest {   
  21.   
  22.     private LoginServlet servlet;   
  23.     private HttpServletRequest mockRequest;   
  24.     private HttpServletResponse mockResponse;   
  25.        
  26.     @Before  
  27.     public void setUp(){   
  28.            
  29.         servlet = new LoginServlet();   
  30.            
  31.         //创建request和response的Mock   
  32.         mockRequest = createMock(HttpServletRequest.class);   
  33.         mockResponse = createMock(HttpServletResponse.class);   
  34.     }   
  35.        
  36.     @After  
  37.     public void tearDown(){   
  38.            
  39.         //为了验证指定的调用行为确实发生了,要调用verify(mock)进行验证。   
  40.         verify(mockRequest);   
  41.         verify(mockResponse);   
  42.     }   
  43.   
  44.     /**  
  45.      * 测试doPost方法  
  46.      * @throws IOException  
  47.      * @throws ServletException  
  48.      * */  
  49.     @Test  
  50.     public void testDoPost() throws IOException, ServletException{   
  51.            
  52.         //录制request和response的动作   
  53.         mockRequest.getParameter("username");   
  54.         expectLastCall().andReturn("yuan");//设置前一方法被调用时的返回值   
  55.            
  56.         mockRequest.getParameter("password");   
  57.         expectLastCall().andReturn("123456");   
  58.            
  59.         mockResponse.sendRedirect("welcome.jsp");   
  60.            
  61.         //回放   
  62.         replay(mockRequest);   
  63.         replay(mockResponse);   
  64.            
  65.         //开始测试Servlet的doPost方法   
  66.         servlet.doPost(mockRequest, mockResponse);   
  67.     }   
  68.        
  69. }  
package net.javayuan.servlet;

import static org.easymock.EasyMock.*;

import java.io.IOException;

import org.junit.Test;
import org.junit.After;
import org.junit.Before;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
 * @(#)LoginServlet.java 2008-6-5 上午09:19:42
 * 
 * @author Yuan
 * LoginServlet Test Case
 */
public class LoginServletTest {

	private LoginServlet servlet;
	private HttpServletRequest mockRequest;
	private HttpServletResponse mockResponse;
	
	@Before
	public void setUp(){
		
		servlet = new LoginServlet();
		
		//创建request和response的Mock
		mockRequest = createMock(HttpServletRequest.class);
		mockResponse = createMock(HttpServletResponse.class);
	}
	
	@After
	public void tearDown(){
		
		//为了验证指定的调用行为确实发生了,要调用verify(mock)进行验证。
		verify(mockRequest);
		verify(mockResponse);
	}

	/**
	 * 测试doPost方法
	 * @throws IOException
	 * @throws ServletException
	 * */
	@Test
	public void testDoPost() throws IOException, ServletException{
		
		//录制request和response的动作
		mockRequest.getParameter("username");
		expectLastCall().andReturn("yuan");//设置前一方法被调用时的返回值
		
		mockRequest.getParameter("password");
		expectLastCall().andReturn("123456");
		
		mockResponse.sendRedirect("welcome.jsp");
		
		//回放
		replay(mockRequest);
		replay(mockResponse);
		
		//开始测试Servlet的doPost方法
		servlet.doPost(mockRequest, mockResponse);
	}
	
}

你可能感兴趣的:(java,jsp,servlet,单元测试,JUnit)