servlet 单元测试 mock easymock2 junit4

本文介绍了一个简单的LoginServlet实现及相应的单元测试案例。该Servlet通过用户名和密码验证用户身份,并根据验证结果重定向到欢迎页面或错误页面。测试案例使用了EasyMock框架模拟HTTP请求和响应,验证了doPost方法的行为。

 

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



不知道测试重定向的页面是不是这么测,我想应该是的。

基于遗传算法的新的异构分布式系统任务调度算法研究(Matlab代码实现)内容概要:本文档围绕基于遗传算法的异构分布式系统任务调度算法展开研究,重点介绍了一种结合遗传算法的新颖优化方法,并通过Matlab代码实现验证其在复杂调度问题中的有效性。文中还涵盖了多种智能优化算法在生产调度、经济调度、车间调度、无人机路径规划、微电网优化等领域的应用案例,展示了从理论建模到仿真实现的完整流程。此外,文档系统梳理了智能优化、机器学习、路径规划、电力系统管理等多个科研方向的技术体系与实际应用场景,强调“借力”工具与创新思维在科研中的重要性。; 适合人群:具备一定Matlab编程基础,从事智能优化、自动化、电力系统、控制工程等相关领域研究的研究生及科研人员,尤其适合正在开展调度优化、路径规划或算法改进类课题的研究者; 使用场景及目标:①学习遗传算法及其他智能优化算法(如粒子群、蜣螂优化、NSGA等)在任务调度中的设计与实现;②掌握Matlab/Simulink在科研仿真中的综合应用;③获取多领域(如微电网、无人机、车间调度)的算法复现与创新思路; 阅读建议:建议按目录顺序系统浏览,重点关注算法原理与代码实现的对应关系,结合提供的网盘资源下载完整代码进行调试与复现,同时注重从已有案例中提炼可迁移的科研方法与创新路径。
【微电网】【创新点】基于非支配排序的蜣螂优化算法NSDBO求解微电网多目标优化调度研究(Matlab代码实现)内容概要:本文提出了一种基于非支配排序的蜣螂优化算法(NSDBO),用于求解微电网多目标优化调度问题。该方法结合非支配排序机制,提升了传统蜣螂优化算法在处理多目标问题时的收敛性和分布性,有效解决了微电网调度中经济成本、碳排放、能源利用率等多个相互冲突目标的优化难题。研究构建了包含风、光、储能等多种分布式能源的微电网模型,并通过Matlab代码实现算法仿真,验证了NSDBO在寻找帕累托最优解集方面的优越性能,相较于其他多目标优化算法表现出更强的搜索能力和稳定性。; 适合人群:具备一定电力系统或优化算法基础,从事新能源、微电网、智能优化等相关领域研究的研究生、科研人员及工程技术人员。; 使用场景及目标:①应用于微电网能量管理系统的多目标优化调度设计;②作为新型智能优化算法的研究与改进基础,用于解决复杂的多目标工程优化问题;③帮助理解非支配排序机制在进化算法中的集成方法及其在实际系统中的仿真实现。; 阅读建议:建议读者结合Matlab代码深入理解算法实现细节,重点关注非支配排序、拥挤度计算和蜣螂行为模拟的结合方式,并可通过替换目标函数或系统参数进行扩展实验,以掌握算法的适应性与调参技巧。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值