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);
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章