Maven环境下easymock开发入门实例

来源:互联网 发布:淘宝有订单怎么发货 编辑:程序博客网 时间:2024/05/16 08:30

在大项目中,都是分模块来完成,比如dao层的数据操作接口没有完成,那么调用它的service层也就无法进行开发和测试了,mock框架就是来解决这个问题的,它只关注业务交互层的操作。
(mock关注的是交互,stub关注的是状态)

1、mock的生命周期

  • record
  • replay
  • verify

2、mock的实例

  • TestEasyMock.java
package service;import model.User;import org.easymock.EasyMock;import org.junit.Test;import service.impl.UserService;import uitls.EntitiesHelper;import dao.IUserDao;public class TestEasyMock {    @Test    public void testLoad(){        //1、创建DAO的mock对象,目前就进入了record阶段        IUserDao ud = EasyMock.createMock(IUserDao.class);        User u = new User(1,"admin","123","管理员");        //2、记录ud可能会发生的操作的结果(一定是跟service中方法对应的整个流程,少一个就会报错)        /**         * 以下代码的的含义是:当在dao中调用了load的方法并且参数为admin         * 的时候,返回值是u对象         */        EasyMock.expect(ud.load("admin")).andReturn(u);//      EasyMock.expect(ud.load("admin")).andReturn(u).times(3);//load("admin")执行3次        //以下两句是用来操作没有返回值的方法        ud.delete("abc");        EasyMock.expectLastCall();        //3、进入测试阶段,也就是replay阶段        EasyMock.replay(ud);        IUserService us = new UserService(ud);        //完成测试        User tu = us.load("admin");        EntitiesHelper.assertUser(tu,u);        //3、验证交互关系        EasyMock.verify(ud);     }}

3、 mock的几种创建方式
这里写图片描述
以下分别为这两个方法的测试方式:

  • createmock
@Test    public void testLoad(){        //1、创建DAO的mock对象,目前就进入了record阶段        IUserDao ud = EasyMock.createMock(IUserDao.class);        User u = new User(1,"admin","123","管理员");        //2、记录ud可能会发生的操作的结果(一定是跟service中方法对应的整个流程,少一个就会报错)        /**         * 以下代码的的含义是:当在dao中调用了load的方法并且参数为admin         * 的时候,返回值是u对象         */        EasyMock.expect(ud.load("admin")).andReturn(u);//      EasyMock.expect(ud.load("admin")).andReturn(u).times(3);//load("admin")执行3次        /**         * 使用的是createmock,如果方法调用顺序不一致,不会抛出异常         */        //以下两句是用来操作没有返回值的方法        ud.delete("abc");        EasyMock.expectLastCall();        EasyMock.expect(ud.load("admin")).andReturn(u);        //3、进入测试阶段,也就是replay阶段        EasyMock.replay(ud);        IUserService us = new UserService(ud);        //完成测试        User tu = us.load("admin");        EntitiesHelper.assertUser(tu,u);        //3、验证交互关系        EasyMock.verify(ud);     }
  • createstrictmock
@Testpublic void teststrictLoad(){        //1、创建DAO的mock对象,目前就进入了record阶段        IUserDao ud = EasyMock.createStrictMock(IUserDao.class);        User u = new User(1,"admin","123","管理员");        //2、记录ud可能会发生的操作的结果(一定是跟service中方法对应的整个流程,少一个就会报错)        /**         * 以下代码的的含义是:当在dao中调用了load的方法并且参数为admin         * 的时候,返回值是u对象         */        EasyMock.expect(ud.load("admin")).andReturn(u);//      EasyMock.expect(ud.load("admin")).andReturn(u).times(3);//load("admin")执行3次        /**         * 使用的是createStrictMock,如果方法调用顺序不一致,会抛出异常         */        //以下两句是用来操作没有返回值的方法        ud.delete("abc");        EasyMock.expectLastCall();        EasyMock.expect(ud.load("admin")).andReturn(u);        //3、进入测试阶段,也就是replay阶段        EasyMock.replay(ud);        IUserService us = new UserService(ud);        //完成测试        User tu = us.load("admin");        EntitiesHelper.assertUser(tu,u);        //3、验证交互关系        EasyMock.verify(ud);     }
0 0
原创粉丝点击