Mockito 简单使用

本贴最后更新于 936 天前,其中的信息可能已经水流花落

1. 一些关于 Mockito 的资料

Mockito 官方文档

掘金 |Mockito 的最佳实践

2. 搭建一个学习 Mockito 的环境

新建一个 SpringBoot 项目,然后引入依赖

<dependency>
            <groupId>org.mockito</groupId>
            <artifactId>mockito-core</artifactId>
            <version>3.12.4</version>
            <scope>test</scope>
        </dependency>

        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <scope>test</scope>
        </dependency>

        <dependency>
            <groupId>org.junit.jupiter</groupId>
            <artifactId>junit-jupiter</artifactId>
            <scope>test</scope>
        </dependency>

        <dependency>
            <groupId>org.junit.jupiter</groupId>
            <artifactId>junit-jupiter-engine</artifactId>
            <scope>test</scope>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>

        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>1.2.70</version>
        </dependency>

创建通常项目使用类
image.png

Learn

public class Learn {

    private Integer id;
    private String title;

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public Learn() {
    }

    public Learn(Integer id, String title) {
        this.id = id;
        this.title = title;
    }

    public String getTitle() {
        return title;
    }

    public void setTitle(String title) {
        this.title = title;
    }

    @Override
    public String toString() {
        return "Learn{" +
                "id=" + id +
                ", title='" + title + '\'' +
                '}';
    }
}

LearnController

package run.runnable.learn.controller;

import com.alibaba.fastjson.JSONObject;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.ResponseBody;
import run.runnable.learn.bean.Learn;
import run.runnable.learn.service.LearnService;

@Controller
public class LearnController {

    @Autowired
    private LearnService learnService;

    @ResponseBody
    public Learn getById(Integer id){
        return learnService.getById(id);
    }

}

LearnDao

package run.runnable.learn.dao;

import run.runnable.learn.bean.Learn;


public interface LearnDao {

    Learn getById(Integer id);

    int save(Learn learn);

    int update(Integer id, Learn learn);

}

LearnServiceImpl

package run.runnable.learn.service.impl;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import run.runnable.learn.bean.Learn;
import run.runnable.learn.dao.LearnDao;
import run.runnable.learn.service.LearnService;

@Service
public class LearnServiceImpl implements LearnService {

    @Autowired
    private LearnDao learnDao;

    @Override
    public Learn getById(Integer id) {
        if (id==null){
            throw new NullPointerException();
        }
        return learnDao.getById(id);
    }

    @Override
    public int save(Learn learn) {
        if (learn==null){
            return 0;
        }
        return learnDao.save(learn);
    }

    @Override
    public int update(Integer id, Learn learn) {
        Learn findLearn = learnDao.getById(id);
        findLearn.setTitle(learn.getTitle());
        return learnDao.update(id,findLearn);
    }
}

LearnService

package run.runnable.learn.service;

import run.runnable.learn.bean.Learn;

public interface LearnService {

    Learn getById(Integer id);

    int save(Learn learn);

    int update(Integer id,Learn learn);

}

3. 针对 LearnServiceImpl 单元测试

package run.runnable.learn.service.impl;

import org.junit.Assert;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.Mockito;
import org.mockito.junit.jupiter.MockitoExtension;
import run.runnable.learn.bean.Learn;
import run.runnable.learn.dao.LearnDao;

@ExtendWith(MockitoExtension.class)
public class LearnServiceImplTest  {

    @Mock
    private LearnDao learnDao;
    @InjectMocks
    private LearnServiceImpl learnService;

    @Test
    void getById(){
        Mockito.when(learnDao.getById(Mockito.any())).thenReturn(new Learn(1,"Math"));
        Learn learn = learnService.getById(1);
        Assert.assertEquals(new Integer(1),learn.getId());
    }

    @Test
    @DisplayName("捕获异常")
    public void getByIdWithNull(){
        Assertions.assertThrows(NullPointerException.class,()->{
            learnService.getById(null);
        });
    }

    @Test
    void save(){
        Mockito.when(learnDao.save(Mockito.any())).thenReturn(1);
        int saveCount = learnService.save(new Learn());
        Assert.assertEquals(new Integer(1),new Integer(saveCount));
    }

    @Test
    void saveNull(){
        int saveCount = learnService.save(null);
        Assert.assertEquals(new Integer(0),new Integer(saveCount));
    }

    @Test
    void update(){
        Mockito.when(learnDao.update(Mockito.anyInt(),Mockito.any())).thenReturn(1);
        Mockito.when(learnDao.getById(Mockito.any())).thenReturn(new Learn(1,"Math"));
        int update = learnService.update(1, new Learn(1, "2"));
        Assert.assertEquals(new Integer(1),new Integer(update));
    }

}

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...