Maven环境下easymock开发入门实例

在大项目中,都是分模块来完成,比如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
@Test
public 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); 

    }

你可能感兴趣的:(maven,easymock)