`

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

    博客分类:
  • Java
阅读更多
用的JUnit是4.4版,EasyMock2.3。

这是Servlet:
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:
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);
	}
	
}


不知道测试重定向的页面是不是这么测,我想应该是的。
分享到:
评论
2 楼 happy250go 2008-11-11  
工作原理不太明白啊,没用过~~~
1 楼 yuan 2008-06-18  
今天重新写了一遍测试代码,Servlet代码不变:
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);
	}

	/**
	 * 测试登录成功
	 * @throws IOException
	 * @throws ServletException
	 * */
	@Test
	public void testLoginSuccessful() throws IOException, ServletException{
		recordUsername("qq7338367");
		recordPassword("123456");
		
		mockResponse.sendRedirect("welcome.jsp");
		replayLogin();
	}
	
	/**
	 * 测试密码错误
	 * @throws IOException
	 * @throws ServletException
	 */
	@Test
	public void testWrongPassword() throws IOException, ServletException{
		recordUsername("qq7338367");
		recordPassword("******");
		
		mockResponse.sendRedirect("error.jsp");
		replayLogin();
	}
	
	/**
	 * 测试用户名不存在
	 * @throws IOException
	 * @throws ServletException
	 */
	@Test
	public void testUsernameNotExist() throws IOException, ServletException{
		recordUsername("yuan");
		recordPassword("123456");
		
		mockResponse.sendRedirect("error.jsp");
		replayLogin();
	}
	
	/**
	 * 录制用户名
	 * @param username 用户名
	 */
	private void recordUsername(String username){
		//录制request和response的动作
		mockRequest.getParameter("username");
		expectLastCall().andReturn(username);//设置前一方法被调用时的返回值
	}
	
	/**
	 * 录制密码
	 * @param password 密码
	 */
	private void recordPassword(String password){
		mockRequest.getParameter("password");
		expectLastCall().andReturn(password);
	}
	
	/**
	 * 回放
	 * @throws IOException
	 * @throws ServletException
	 */
	private void replayLogin() throws IOException, ServletException{

		//回放
		replay(mockRequest);
		replay(mockResponse);
		
		//开始测试Servlet的doPost方法
		servlet.doPost(mockRequest, mockResponse);
	}
}

还有哪里有待改进?希望大家能提提意见,谢谢了!

相关推荐

    单元测试用例设计例子

    本文档举例并描述了单元测试用例的设计模板,并且给出了几种设计测试用例的方法

    测试用例内有三个测试用例相关文件

    测试用例三个文件 一个Word写的测试用例模板 一个Word写的详细的测试用例 一个Excel写的测试用例模板 希望能对大家有帮助

    软件测试用例模版.xls

    软件测试用例模版【仅供参考】软件测试用例模版【仅供参考】软件测试用例模版【仅供参考】软件测试用例模版【仅供参考】软件测试用例模版【仅供参考】软件测试用例模版【仅供参考】软件测试用例模版【仅供参考】软件...

    测试用例编写资料汇总

    写测试用例不可不看的好东东!!!.pdf 史上最全的测试用例设计方法总结.doc 如何设计编制软件测试用例.doc 测试用例.doc 测试用例的设计-边界值法例子.doc 测试用例的设计等价划分法.ppt 测试用例示例1.doc 测试用例表...

    测试用例实例++非常详细

    测试用例示例测试用例示例测试用例示例测试用例示例测试用例示例测试用例示例测试用例示例测试用例示例测试用例示例测试用例示例测试用例示例

    Web测试中的界面测试用例设计

    例如在“名称”框中输入超过允许边界个数的字符,假设最多255个字符, Web测试中的界面测试用例设计 软件测试 一、文本框、按钮等控件测试 1、文本框的测试 如何对文本框进行测试: a、输入正常的字母或数字;...

    从测试用例看测试的问题及变化

    对于一个测试人员来说测试用例的设计与编写是一项必须掌握的能力。但有效的设计和熟练的编写却是一个十分复杂的技术,它需要你对整个软件不管从业 务还是功能上都有一个明晰的把握。如何系统、结构的对用例加以规范...

    软件测试中如何进行增加、编辑、删除和密码修改测试用例

    几乎每个系统都会用到,针对这几个方面,写如下测试用例一:增加1:在添加页面,输入要添加的数据项均合理,检查数据库以及列表页是否添加了相应的数据2:在添加页面,留出一个必填项为空,检查是否会提示3:按照...

    一份测试初学者的测试用例

    一份比较详细的测试用例,发上来于大家分享一下。

    lua单元测试框架测试用例实例

    基于busted单元测试框架的实例开发测试用例,spec目录下是基于busted的测试用例,lua的单元测试很难找,有需要的可以拿走

    一个测试用例样本,初学必看

    大多初学者都不知道测试用例该写什么,可以参照我写的一个测试用例啊!

    测试用例的设计方法

    测试用例设计综合策略 1. Myers提出了使用各种测试方法的综合策略: 1)在任何情况下都必须使用边界值分析方法,经验表明用这种方法设计出测试用例发现程序错误的能力最强。 【文章来源:文斯测试技术研究中心 ...

    登录界面测试用例

    测试环境 win7操作系统和浏览器IE8 步骤 (1):打开浏览器,在浏览器的地址栏中输入“用户登录”页面的URL, 单击【转到】按钮; (2):在“用户名”文本框输入:abc1234; (3):在“密码”文本框输入:abc5678...

    硬件测试用例参考(二)

    硬件测试用例参考(二)

    如何编写一个好的测试用例

    如何编写一个好的测试用例,如何编写一个好的测试用例,如何编写一个好的测试用例

    功能测试用例大全1500条

    测试用例的分类 3 文本框需求 4 字段为特殊代码校验: 4 文本框为数值型 4 文本框为日期型 5 文本框为时间型 6 密码框 返回目录 6 单选按钮 7 组合列表框/下拉列表 7 数码框(up-down)控件 8 搜索框填充域测试 8 复...

    性能测试用例,测试用例

    性能测试用例性能测试用例性能测试用例性能测试用例

    测试用例设计:测试用例的基本概念 测试用例的设计和编写 测试用例评估 测试用例的管理

    测试用例的基本概念 测试用例的设计和编写 测试用例评估 测试用例的管理

    酒店管理系统 单元测试用例

    酒店管理系统 测试用例主要对各子系统用例分析 即用例卡

Global site tag (gtag.js) - Google Analytics