用EasyMock模拟HttpServletRequest等对象

  有时候候为了测试控制层或业务层通常我们要模拟个别对象,屏蔽对这些对象的依懒。如我们测试struts1.x的时候,象HttpservletRequest等对象是由容器创建的,要测试控制层,通常我们要启动容器(一般情况下也是启动容器进行测试)。但是我们也可以用EasyMock模拟HttpServletRequest出等对象(spring已提供类似的模拟对象MockHttpServletRequest) 实现struts1.x控制层测试.

      而通常,EasyMock用得更多在业务层上的测试。通常业务层依懒于DAO层,我们可以用EasyMock模拟Dao对象,屏蔽对DAO依懒。好废话少说了。进入正题。

      EasyMock提供对接口,类的模拟(以前要通过EasyMock扩展包才支持),能够通过录制、回放、检查三步来完成大体的测试过程。

    对HttpServletRequest的模拟:

public class TestMockHttpServletRquest {

	IMocksControl control = EasyMock.createControl();

	HttpServletRequest request = null;

	HttpSession session = null;

	@Before
	public void setUp() {
		request = control.createMock(HttpServletRequest.class); //创建模拟对象

		session = control.createMock(HttpSession.class);////创建模拟对象

    
	}

	@Test
	public void testWeb() {    //录制
		EasyMock.expect(request.getParameter("name")).andReturn("landy");
           //总是返回模拟的对象
		EasyMock.expect(request.getSession()).andStubReturn(session);
		
		EasyMock.expect(session.getAttribute("name")).andReturn("landy");
		
		control.replay(); //回放
		String name=request.getParameter("name");
		System.out.println(name);
		HttpSession session2 =request.getSession();
		String landy=(String)session.getAttribute("name");
		System.out.println("landy:"+landy);
		Assert.assertEquals(landy, name);
	}
	
	@After
	public void tearDown() {
		
		control.verify(); // 验证
	}

 

   HttpRequestServlet  等对象比较复杂,   完成用easyMock对这些对象的模拟,EasyMock的一些基本用法就掌握了。

 

 EasyMock也可以用来模拟类.

 

 

写道
public class BeanService {  //被模拟的类

/* (non-Javadoc)
* @see com.landyyan.test.IbeanService#testMock()
*/
public String testMock() { //有返值方法

return "hello222222";
}

public void save() { //没有返回值 方法

System.out.println();
System.out.println("sssss");
}

 

 测试类:

public class TestBeanService  {

	private IMocksControl control = EasyMock.createControl();

	private BeanService service = null;

	
	@Before
	public void setUp() {

		service = control.createMock(BeanService.class);
	}

	@Test
	public void testSayHi() {
		

		EasyMock.expect(service.testMock()).andReturn("hello22").andReturn("sss222");
//第一次调用,返回“hello22”,  第二次调用,返回sss222
		control.replay();
                                 //若是其它Service 将模拟出的Dao对象set到业务层中,然后调用即可
		System.out.println(service.testMock()); 
		System.out.println(service.testMock()); 
			}

	@After
	public void testAfter() {
		control.verify();
	}
}

 

 

 

 

 

 

 

你可能感兴趣的:(DAO,spring)