完整版见https://jadyer.github.io/2013/07/09/easymock-servlet/



这是一个WebProject,但不需配置web.xml,因为EasyMock用不上它


首先是用到的实体类User.java

package com.jadyer.model;

public class User {
	private int id;
	private String username;
	private String password;
	
	/*-- 三个属性的setter和getter略 --*/
	
	public User(){}
	
	public User(int id, String username, String password) {
		this.id = id;
		this.username = username;
		this.password = password;
	}
}

下面是待测试的LoginServlet.java

package com.jadyer.servlet;

import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;

import com.jadyer.model.User;

public class LoginServlet extends HttpServlet {
	private static final long serialVersionUID = 6655227641354075528L;

	public boolean isLogin(HttpServletRequest request){
		HttpSession session = request.getSession();
		if(null == session){
			return false;
		}
		User user = (User)session.getAttribute("loginUser");
		if(null == user){
			return false;
		}
		return true;
	}
}

最后是使用EasyMock编写的测试用例LoginServletTest.java

package com.jadyer.servlet;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;

import org.easymock.EasyMock;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;

import com.jadyer.model.User;

/**
 * EasyMock框架在使用时只需要一个easymock-3.1.jar 
 * 下载地址为http://sourceforge.net/projects/easymock/files/
 * @create Jul 9, 2013 2:28:41 PM
 * @author 玄玉
  
  
   
   
 */
public class LoginServletTest {
	private LoginServlet servlet;
	private HttpServletRequest request;
	private HttpSession session;
	
	@Before
	public void init(){
		servlet = new LoginServlet();
		request = EasyMock.createStrictMock(HttpServletRequest.class);
		session = EasyMock.createStrictMock(HttpSession.class);
	}
	
	/**
	 * 测试登录失败的情况(session为空)
	 */
	@Test
	public void testIsLoginFailSessionIsNull(){
		//声明HttpServletRequest获取到的HttpSession是空的
		EasyMock.expect(request.getSession()).andReturn(null);
		EasyMock.replay(request, session);
		//验证HttpSession为空时登录应该是失败的
		Assert.assertFalse(servlet.isLogin(request));
		EasyMock.verify(request, session);
	}
	
	/**
	 * 测试登录失败的情况(session中无用户)
	 */
	@Test
	public void testIsLoginFailSessionNoUser(){
		//声明HttpServletRequest获取到的是正常的HttpSession
		EasyMock.expect(request.getSession()).andReturn(session);
		//声明HttpSession中无用户
		EasyMock.expect(session.getAttribute("loginUser")).andReturn(null);
		EasyMock.replay(request, session);
		//验证HttpSession中无用户时登录应该是失败的
		Assert.assertFalse(servlet.isLogin(request));
		EasyMock.verify(request, session);
	}
	
	/**
	 * 测试登录成功的情况
	 */
	@Test
	public void testIsLoginSuccess(){
		//声明HttpServletRequest获取到的是正常的HttpSession
		EasyMock.expect(request.getSession()).andReturn(session);
		//声明HttpSession中存在用户
		EasyMock.expect(session.getAttribute("loginUser")).andReturn(new User());
		EasyMock.replay(request, session);
		//验证HttpSession有效且存在用户时登录应该是成功的
		Assert.assertTrue(servlet.isLogin(request));
		EasyMock.verify(request, session);
	}
}
  
  
Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐