Test篇】一. 使用EasyMock测试DAO


中国加油,武汉加油!

篇幅较长,配合目录观看

项目准备

  1. 新建springboot项目nz1904-easymock-testdao
  2. 导入lombox和web依赖

1. 案例

1.1 导包

<!--专门专门用来做业务逻辑层 或者 Controller层的测试的-->
<dependency>
    <groupId>org.easymock</groupId>
    <artifactId>easymock</artifactId>
    <version>3.5.1</version>
</dependency>

1.1 写User

package com.wpj.pojo;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

@Data
@AllArgsConstructor
@NoArgsConstructor
public class User {
    private int id;
    private String userName;
    private String password;
}

1.2 写DAO

package com.wpj.dao;

import com.wpj.pojo.User;

public interface IUserDao {
    User findUserById(int id);
    void save(User user);
    void update(User user);
}

1.3 service及其impl

package com.wpj.service;

import com.wpj.pojo.User;

public interface IUserService {
    User findUserById(int id);
    void save(User user);
    void update(User user);
}
package com.wpj.service.impl;

import com.wpj.dao.IUserDao;
import com.wpj.pojo.User;
import com.wpj.service.IUserService;

/**
 * EasyMock这个框架就是专门应对下面的这种问题
 *
 */
public class UserServiceImpl implements IUserService {

    private IUserDao iUserDao;

    public void setUserDAO(IUserDao iUserDao) {
        this.iUserDao = iUserDao;
    }

    @Override
    public User findUserById(int id) {
        iUserDao.findUserById(id);
        return iUserDao.findUserById(id);
    }

    @Override
    public void save(User user) {
        iUserDao.save(user);
    }

    @Override
    public void update(User user) {
        iUserDao.update(user);
    }
}

1.4 Test

package com.wpj.service;

import com.wpj.dao.IUserDao;
import com.wpj.pojo.User;
import com.wpj.service.impl.UserServiceImpl;
import org.easymock.EasyMock;
import org.junit.Before;
import org.junit.jupiter.api.Test;

public class TestUserService {

    private UserServiceImpl userService;

    private User exUser;

    /**
     * 前置
     */
    @Before
    public void init(){
        userService=new UserServiceImpl();
        exUser=new User(1,"123","123");
    }

    /**
     * 通过id找用户
     * 这个测试框架的主要作用  就是能够 动态的生成这个类(DAO)的实例
     * 而且还能进行设置(传入什么参数) 当前方法返回什么值?
     *
     */
    @Test
    public void testFindUserById(){
        //下面的第一步:调用框架 生成DAO的实例
        IUserDao userDAO = EasyMock.createMock(IUserDao.class);
        //要做记录(告诉他  我要调用哪一个方法 传入一个什么参数  你要返回一个什么值给我)
        EasyMock.expect(userDAO.findUserById(1)).andReturn(exUser);
        //要使能(要让上面的设置生效)
        EasyMock.replay(userDAO);

        //接下来就将上面的dao设置到service中去
        userService.setUserDAO(userDAO);
        //接下来进行调用测试
        userService.findUserById(1);

        //进行校验 业务逻辑层调用对不对   这个校验实际上校验了是上面DAO在service中的调用次数
        EasyMock.verify(userDAO);
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章