使用EasyMock测试DAO
中国加油,武汉加油!
篇幅较长,配合目录观看
项目准备
- 新建springboot项目nz1904-easymock-testdao
- 导入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);
}
}