⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 loginservlettest.java

📁 OSGI_Opendoc, 基于OSGI框架Equinox的实战讲解
💻 JAVA
字号:
package org.riawork.demo.web.servlet.test;
/*
 * RIAWork.org
 * 
 * OSGI Opendoc Demo
 */
import java.io.IOException;

import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import junit.framework.TestCase;

import org.easymock.MockControl;
import org.osgi.framework.BundleContext;
import org.osgi.framework.ServiceReference;
import org.riawork.demo.service.user.Validator;
import org.riawork.demo.web.servlet.LoginServlet;
/**
 * desc: 测试登录响应Servlet
 *
 * @author jerry
 */
public class LoginServletTest extends TestCase {

	private StringBuffer resultBuf=new StringBuffer();
	
	/**
	 * 测试登录成功时
	 * 
	 * @throws Exception
	 */
	public void testDoPostWhenLoginSuccess() throws Exception{
		resultBuf=new StringBuffer();
		mockTest("jerry","bluedavy",true,false);
		assertEquals(true,resultBuf.toString().indexOf("Login success")!=-1);
	}
	
	/**
	 * 测试登录失败时
	 * 
	 * @throws Exception
	 */
	public void testDoPostWhenLoginFail() throws Exception{
		resultBuf=new StringBuffer();
		mockTest("jerry","",false,false);
		assertEquals(true,resultBuf.toString().indexOf("Login Fail")!=-1);
	}
	
	/**
	 * 测试登录错误时
	 * 
	 * @throws Exception
	 */
	public void testDoPostWhenLoginError() throws Exception{
		resultBuf=new StringBuffer();
		mockTest("jerry","error",false,true);
		assertEquals(true,resultBuf.toString().indexOf("Login error")!=-1);
	}
	
	/*
	 * Mock测试类的依赖
	 */
	private void mockTest(String username,String password,boolean loginResult,boolean loginError) throws Exception{
		// Mock HTTP
		MockControl mc=MockControl.createControl(HttpServletRequest.class);
		HttpServletRequest request=(HttpServletRequest)mc.getMock();
		request.getParameter("username");
		mc.setReturnValue(username);
		request.getParameter("userpass");
		mc.setReturnValue(password);
		mc.replay();
		MockControl responseMC=MockControl.createControl(HttpServletResponse.class);
		HttpServletResponse response=(HttpServletResponse)responseMC.getMock();
		response.getOutputStream();
		responseMC.setReturnValue(new MockServletOutputStream());
		response.setContentType("text/html");
		responseMC.setVoidCallable(1);
		responseMC.replay();
		// Mock HTTP
		// Mock ValidatorService 在采用Declarative Services后不需要Mock Service的获取部分
		MockControl validatorMC=MockControl.createControl(Validator.class);
		Validator validator=(Validator)validatorMC.getMock();
		validator.validate(username, password);
		if(loginError)
			validatorMC.setDefaultThrowable(new Exception());
		else
			validatorMC.setReturnValue(loginResult);
		validatorMC.replay();
		MockControl serviceRefMC=MockControl.createControl(ServiceReference.class);
		ServiceReference serviceRef=(ServiceReference)serviceRefMC.getMock();
		MockControl bcMC=MockControl.createControl(BundleContext.class);
		BundleContext bc=(BundleContext)bcMC.getMock();
		bc.getServiceReference(Validator.class.getName());
		bcMC.setReturnValue(serviceRef);
		bc.getService(serviceRef);
		bcMC.setReturnValue(validator);
		bcMC.replay();
		// Mock ValidatorService
		LoginServlet servlet=new LoginServlet(bc);
		servlet.doPost(request, response);
	}
	
	class MockServletOutputStream extends ServletOutputStream{

		public void write(int b) throws IOException {
			
		}
		
		public void println(String msg){
			resultBuf.append(msg);
		}
		
	}
	
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -