美文网首页
单元测试Mockito写法介绍

单元测试Mockito写法介绍

作者: cmeizu | 来源:发表于2020-06-08 19:28 被阅读0次
  • 之前因为在做项目开发的时候,做单元测试用容器启动,现在所在的公司用的是Mockito这个工具来模拟,做单元测试,所心记录一下学到的知识。

Mockito个人理解

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

  • 下面举一下例子来说明一下。

  • sevice的代码

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);
  • serviceImpl
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;
}
  • dao层代码
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());
    }
}
  • 测试结果展示


    image.png
  • 通过上面的是没有排序的,下面经过我们的方法得到一个经过年龄排序的列表,证明我们的测试是通过了的。

相关文章

  • 单元测试Mockito写法介绍

    之前因为在做项目开发的时候,做单元测试用容器启动,现在所在的公司用的是Mockito这个工具来模拟,做单元测试,所...

  • mockito单元测试初体验(一)

    本文主要讲利用mockito框架的单元测试流程,具体的mockito代码部分放在下篇介绍。 1.1 单元测试的目的...

  • 单元测试框架:Robolectric

    前言 前面我们介绍了单元测试框架 JUnit 和 Mockito 的使用(详情查看:单元测试框架:JUnit,单元...

  • Android单元测试之PowerMockito

    在博客Android单元测试之Mockito中,主要介绍了Mockito测试框架和基本使用。在博客结束时,我们提出...

  • Mockito使用总结

    Mockito介绍 Mockito就是一个优秀的用于单元测试的mock框架。在软件开发中提及”mock”,通常理解...

  • 【原创】单元测试mockito用法

    【原创】单元测试mockito用法

  • Mockito-第一篇

    开启Mockito单元测试系列,这是第一篇。本文将介绍如何用Mockito来mock一个股票服务接口,在服务尚未实...

  • Android单元测试(一)

    本文介绍了Android单元测试入门所需了解的内容,包括JUnit、Mockito和PowerMock的使用,怎样...

  • Mockito使用介绍

    Mockito是用于写Java的单元测试框架,在单元测试中使用Mockito来创建和模拟(Mock)假的Java对...

  • SpringBoot 单元测试与 Mockito 使用

    SpringBoot 单元测试与 Mockito 使用 单元测试应遵循 → AIR 原则 SpringBoot 测...

网友评论

      本文标题:单元测试Mockito写法介绍

      本文链接:https://www.haomeiwen.com/subject/acqdtktx.html