有时候候为了测试控制层或业务层通常我们要模拟个别对象,屏蔽对这些对象的依懒。如我们测试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 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(); } }