单元测试Mockito写法介绍

2020-06-08  本文已影响0人  cmeizu

Mockito个人理解

简单的来说就是不去关注数据库调出来的数据,数据库层的数据由自己来指定,去检测自己写的业务代码,数据方面不出错的情况下,业务代码是否是正确的。

package cn.cmeizu.junit.service;

import cn.cmeizu.junit.entity.User;

import java.util.List;

/**
 * @author 思念是一种痛
 * @date 2020/6/8 18:34
 */
public interface UserService {
    /**
     * 通过sex获取用户列表
     *
     * @param userId
     * @return
     */
    List<User> findBySex(Integer userId);
package cn.cmeizu.junit.service.impl;

import cn.cmeizu.junit.dao.UserDao;
import cn.cmeizu.junit.entity.User;
import cn.cmeizu.junit.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;
import java.util.stream.Collectors;

/**
 * @author 思念是一种痛
 * @date 2020/6/8 18:34
 */
@Service
public class UserServiceImpl implements UserService {
    @Autowired
    private UserDao userDao;

    @Override
    public List<User> findBySex(Integer sex) {
        List<User> users = userDao.findBySex(sex);
        List<User> result = users.stream().sorted((s1, s2) -> s1.getAge().compareTo(s2.getAge())).collect(Collectors.toList());
        return result;
    }
}
package cn.cmeizu.junit.entity;

import lombok.AllArgsConstructor;
import lombok.Data;

/**
 * @author 思念是一种痛
 * @date 2020/6/8 18:36
 */
@Data
@AllArgsConstructor
public class User {
    /**
     * 用户id
     */
    private Integer id;

    /**
     * 用户姓名
     */
    private String name;

    /**
     * 用户年龄
     */
    private Integer age;

    /**
     * 性别
     */
    private Integer sex;
}
package cn.cmeizu.junit.dao;

import cn.cmeizu.junit.entity.User;

import java.util.List;

/**
 * @author 思念是一种痛
 * @date 2020/6/8 18:42
 */
public interface UserDao {
    /**
     * 查询用户列表
     *
     * @param sex
     * @return
     */
    List<User> findBySex(Integer sex);
}
package cn.cmeizu.junit.dao;

import cn.cmeizu.junit.entity.User;
import org.springframework.stereotype.Service;

import java.util.List;

/**
 * @author 思念是一种痛
 * @date 2020/6/8 18:53
 */
@Service
public class UserDaoImpl implements UserDao {
    @Override
    public List<User> findBySex(Integer sex) {
        return null;
    }
}
package cn.cmeizu.junit.service.impl;

import cn.cmeizu.junit.dao.UserDao;
import cn.cmeizu.junit.entity.User;
import cn.cmeizu.junit.service.UserService;
import org.junit.Assert;
import org.junit.jupiter.api.Test;
import org.junit.runner.RunWith;
import org.mockito.Mockito;
import org.springframework.test.context.junit4.SpringRunner;

import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.List;

import static org.mockito.Mockito.doReturn;

/**
 * @author 思念是一种痛
 * @date 2020/6/8 18:59
 */
@RunWith(SpringRunner.class)
class UserServiceImplTest {
    private UserService userService;

    @Test
    void findByUserId() throws NoSuchFieldException, IllegalAccessException {
        userService = new UserServiceImpl();
        UserDao userDao = Mockito.mock(UserDao.class);

        Field field = UserServiceImpl.class.getDeclaredField("userDao");
        field.setAccessible(true);
        field.set(userService, userDao);

        List<User> users = new ArrayList<>();
        users.add(new User(1, "张三", 18,1));
        users.add(new User(2, "李四", 30,1));
        users.add(new User(3, "王五", 35,1));
        users.add(new User(4, "王二麻子", 12,1));
        users.add(new User(5, "小明", 24,1));
        users.add(new User(6, "李四", 19,1));

        doReturn(users).when(userDao).findBySex(1);

        List<User> list = userService.findBySex(1);

        Assert.assertNotEquals(0, list.size());
        Assert.assertEquals("王二麻子", list.get(0).getName());
    }
}
上一篇下一篇

猜你喜欢

热点阅读