Mock使用

简介: SpringBoot/SpringMvc使用Mock/MockBean 做单元测试

Mock依赖:
SpringBoot依赖

<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
            <exclusions>
                <exclusion>
                    <artifactId>spring-test</artifactId>
                    <groupId>org.springframework</groupId>
                </exclusion>
            </exclusions>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.springframework/spring-test -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-test</artifactId>
            <version>5.0.1.RELEASE</version>
            <scope>test</scope>
        </dependency>

SpringMvc依赖:

<dependency>
            <groupId>org.mockito</groupId>
            <artifactId>mockito-all</artifactId>
            <version>1.8.5</version>
            <scope>test</scope>
        </dependency>
  <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-test</artifactId>
            <version>${spring.version}</version>
            <scope>test</scope>
        </dependency>

 <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
        </dependency>

Mock对象

DemoDao demoDao = mock(DemoDao.class);

对象注入到bean

ReflectionTestUtils.setField(demoBean, "demoDao", demoDao);

mock的对象只对demoBean有效,其他地方用到了demoDao,需要重新注入(ReflectionTestUtils.setField(demoBean2, "demoDao", demoDao);)

MockBean

@Service
public class DemoServiceMock {
    @MockBean
    protected DemoService demoService;
    /**
     * mock调用方法
     */
    public void mockPInstanceNull(String param) {
        when(demoService.demoTest(ArgumentMatchers.eq(param))).thenReturn("demoTestString");
    } }

注意:
1.DemoServiceMock 不能被继承,否则会报错

  1. @MockBean
    protected DemoService demoService;

不能在其他地方声明,否则报错
3.尽量使用eq()方法,慎用any**()方法

目录
相关文章
Mac安装tree插件
Mac安装tree插件
235 0
|
7月前
|
人工智能 安全 IDE
一天成为Java开发高手:用飞算JavaAI实现十倍提效
“一天成为Java开发高手”曾被视为天方夜谭,但飞算JavaAI的出现改变了这一局面。这款AI开发助手通过智能引导、需求分析、自动化逻辑处理和完整代码工程生成,大幅简化了Java开发流程。它不仅帮助新手快速上手,还让资深开发者提高效率,减少调试时间。现在,参与“飞算JavaAI炫技赛”,展示你的开发实力,赢取丰厚奖品!
|
9月前
|
C语言 开发者
【C语言】数学函数详解
在C语言中,数学函数是由标准库 `math.h` 提供的。使用这些函数时,需要包含 `#include <math.h>` 头文件。以下是一些常用的数学函数的详细讲解,包括函数原型、参数说明、返回值说明以及示例代码和表格汇总。
234 6
|
安全 Linux 芯片
传统的GPIO接口 【ChatGPT】
传统的GPIO接口 【ChatGPT】
|
数据采集 SQL 安全
Minerva -- Airbnb 的大规模数据指标系统 Part 1
Minerva -- Airbnb 的大规模数据指标系统 Part 1
1152 0
Minerva -- Airbnb 的大规模数据指标系统 Part 1
|
机器学习/深度学习 人工智能 算法
人工智能的伦理困境与技术挑战
在AI技术的迅猛发展中,伦理问题和技术性挑战日益凸显。本文将深入探讨AI伦理问题的多维度挑战,包括数据隐私、算法偏见和自动化失业等,并分析当前AI技术面临的主要技术性挑战,如可解释性、安全性和通用智能的实现问题。通过引用权威研究和统计数据,本文旨在为读者提供一个关于AI伦理和技术挑战的全面视角,促进对AI未来发展的深入思考。
|
Serverless Python
函数计算FC的sd里面inpaint anything安装了用不了是怎么回事?
函数计算FC的sd里面inpaint anything安装了用不了是怎么回事?
731 1
|
机器学习/深度学习 人工智能 安全
PyRIT:主动发现生成式 AI 系统潜在风险的开放式自动化框架
【2月更文挑战第9天】PyRIT:主动发现生成式 AI 系统潜在风险的开放式自动化框架
267 3
PyRIT:主动发现生成式 AI 系统潜在风险的开放式自动化框架
|
消息中间件 Shell Docker
百度搜索:蓝易云【docker rabbitmq-清空queue队列数据】
通过以上步骤,您可以使用Docker清空RabbitMQ队列的数据。这将帮助您重置队列并清除旧数据,以进行新的测试或使用。
151 0
|
存储 缓存 网络虚拟化
网络互联设备(集线器、交换机、路由器)
网络互连设备用于将网络的各个部件连接到一起,从连接性质的不同可分为两种: 物理上的互连能力:指所支持的物理接口,能连接的物理介质类型 协议上的互连能力:指工作在不同协议类型的网络之间,实现不同协议数据包的转换。