中國加油,武漢加油!
篇幅較長,配合目錄觀看
項目準備
- 新建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);
}
}