栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

单元测试之MockBean

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

单元测试之MockBean

上次介绍了如何调用本地接口的MockMvc,这次分享的是如何使用MockBean模拟第三方接口的返回值。使用的技术为Mockito。

项目中需要添加依赖:

testImplementation 'org.springframework.boot:spring-boot-starter-test'

1、创建被测试的SparkService

package com.spark.mock.service;

import org.springframework.stereotype.Service;

@Service
public class SparkService {

    
    public String getName(String pattern){
        // 此处可以写调用没有网络权限,或者第三方没有开发完成的接口
        return "测试成功";
    }

    
    public String getName(String pattern1,String pattern2){
        // 此处可以写调用没有网络权限,或者第三方没有开发完成的接口
        return "测试成功";
    }
}

2、创建Controller

	@PostMapping("/api/mockBean")
    public String getMock(){
        return sparkService.getName("wsl");
    }

    @PostMapping("/api/getMockMulParamters")
    public String getMockMulParamters(){
        return sparkService.getName("Spark","24");
    }

3、写单元测试类

在单元测试类中引入需要被模拟的接口SparkService,并在上面添加注解

@MockBean
private SparkService sparkService;

创建测试方法分别模拟一个参数、多个参数、抛出异常三种情况。主要使用的依赖以及实现方式

import org.springframework.boot.test.mock.mockito.MockBean
import static org.mockito.ArgumentMatchers.eq
import static org.mockito.Mockito.when
when(sparkService.getName(eq("wsl"))).thenReturn("此处为模拟单个接口参数的返回结果");

测试方法

@MockBean
private SparkService sparkService;


创建测试方法分别模拟一个参数、多个参数、抛出异常三种情况。主要使用的依赖以及实现方式

import org.springframework.boot.test.mock.mockito.MockBean
import static org.mockito.ArgumentMatchers.eq
import static org.mockito.Mockito.when
when(sparkService.getName(eq("wsl"))).thenReturn("此处为模拟单个接口参数的返回结果");
    
    @Test
    public void getMock() throws Exception {
        // 模拟接口的返回值  getName里面的参数满足条件可以自己设置
        when(sparkService.getName(eq("wsl"))).thenReturn("此处为模拟单个接口参数的返回结果");
        ResultActions perform = mvc.perform(post("/api/mockBean") // post方法 请求路径
                .contentType(MediaType.APPLICATION_JSON));
        perform.andReturn().getResponse().setCharacterEncoding("UTF-8"); // 解决response返回乱码
        perform.andDo(print()); // 打印返回的执行结果
    }



    
    @Test
    public void getMockException() throws Exception {
        // 模拟接口的返回值  getName里面的参数满足条件可以自己设置
        when(sparkService.getName(eq("Spark"),eq("24"))).thenReturn("此处为多个接口参数模拟抛出的异常");
        ResultActions perform = mvc.perform(post("/api/getMockMulParamters") // post方法 请求路径
                .contentType(MediaType.APPLICATION_JSON));
        perform.andReturn().getResponse().setCharacterEncoding("UTF-8"); // 解决response返回乱码
        perform.andDo(print()); // 打印返回的执行结果
    }



    
    @Test
    public void getMockMulParamters() throws Exception {
        // 模拟接口的返回值  getName里面的参数满足条件可以自己设置
        when(sparkService.getName(eq("Spark"),eq("24"))).thenThrow(new Exception("此处为多个接口参数模拟抛出的异常"));
        ResultActions perform = mvc.perform(post("/api/getMockMulParamters") // post方法 请求路径
                .contentType(MediaType.APPLICATION_JSON));
        perform.andReturn().getResponse().setCharacterEncoding("UTF-8"); // 解决response返回乱码
        perform.andDo(print()); // 打印返回的执行结果
    }

项目地址:https://gitee.com/goodwangboy/junit-test.git
上面介绍的方式可以帮助我们模拟未开发完成的接口,无权限的接口等等,不用等待接口提供方开发完成再去开发,大大提高开发效率。由于在开发过程中接口会出现发版,修改等不稳定的情况,使用这种MockBean的模拟接口调试开发方式,可以大大节省开发的调试时间。

欢迎关注公众号

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/292711.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号