使用mockito辅助springboot service层单元测试

AI生成JUnit测试实战:TRAE插件提升Spring Boot单元测试覆盖率 单元测试是保障软件质量的关键环节,通过验证代码单元在隔离环境下的行为是否符合预期,能够有效预防回归缺陷。其核心原理在于模拟依赖、控制输入并断言输出,从而构建快速反馈的安全网。在Java生态中,JUnit与Mockito构成了单元测试的技术基石,结合JaCoCo等覆盖率工具,可以量化测试的完备性。随着AI编码助手的兴起,开发者现在可以借助像TRAE这样的智能插件,自动化生成高贴合度的测试骨架代码。这极大地提升了编写测试的效率,尤其适用于Spring Boot项目中Service层等包含复杂业务逻辑的代码模块。 阅读详情

 

目的:

        测试一个springboot service层的一段插入MySQL代码性能;

要求:

        1. 单元测试,不走web调用;

        2. 数据来自第三方服务,数据量较大,返回时间10s+,希望mock掉此过程;

方案:

        junit+mockito

代码:

?下面的类是要测的service,startCalculation()函数new thread新开线程(错误做法)里的“批量插入data”

是要测试的代码,dataScienceRpc.callMethod()是插入数据的来源,也是要通过mock回避掉的过程:

@Service
public class ExampleServiceImpl implements ExampleService {

    // 其它变量&函数
    @Autowired
    private DataScienceRpc dataScienceRpc;

    @Override
    public boolean startCalculation(long id) {

        // 其它操作
        Runnable myRunnable = () -> {
            // 其它操作
            JSONArray config = JSONUtils.toJSONArray(str);
            JSONArray data = dataScienceRpc.callMethod(id, config);
            // 批量插入data
        };

        Thread thread = new Thread(myRunnable);
        thread.start();

    }

}

?下面是springboot里pom.xml对junit+mockito的配置(springboot自带mockito):

<dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <version>4.12</version>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-test</artifactId>
    <version>2.0.6.RELEASE</version>
    <!--<scope>test</scope>-->
</dependency>

 ?下面是单元测试代码:

import com.alibaba.fastjson.JSONArray;
import com.example.DataScienceRpc;
import com.example.ExampleService;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mockito;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.boot.test.mock.mockito.MockBean;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;

import java.io.*;
import java.util.ArrayList;

import static org.mockito.Mockito.when;

/**
 * 必须和springboot启动类放在同一命名空间下
 */

// 使用这个跑单测会加载整个容器
@RunWith(SpringJUnit4ClassRunner.class)
@SpringBootTest
public class ExampleTest {

    @MockBean
    private DataScienceRpc dataScienceRpc;

    @Autowired
    ExampleService exampleService;


    @Before
    public void setup(){
        String dataPath = "/Desktop/data.txt";
        String data = readToBuffer(dataPath);
        JSONArray jsonArr = JSONArray.parseArray(data);

        when(dataScienceRpc.callMethod(Mockito.anyLong(), Mockito.any(JSONArray.class)))
                .thenReturn(jsonArr);

    }

    @Test
    public void test(){

        exampleService.startCalculation(133);
    }

    public String readToBuffer(String filePath){
        // 读取文件
    }

}

说明(坑):

        1.  测试类必须和springboot启动类放在同一命名空间下;

        2. @RunWith(SpringJUnit4ClassRunner.class),@SpringBootTest注解,加载整个容器;

        3. @MockBean,将mock出spring bean,若与spring容器无关,可用@Mock;

        4. Mockito.when方法mock函数返回值,不会进入该函数内部;若使用Mockito.anyLong()等方法模糊匹配函数的任意此类型参数,注意当运行时函数参数类型与指定Mockito类型不符,该mock将不会成功;

        此博文不错:https://www.cnblogs.com/ceshi2016/p/9550823.html

        5. 此情况下startCalculation()函数执行完后立即返回,new出的thread(异步执行)没执行完,JVM就会退出,导致要测试的代码执行不完;故不建议此种写法,异步执行的过程应该抽象出一个函数,一是保持上层函数简洁,可读性强,二是方便单元测试;

 

 

 

 

 

SpringBoot单元测试实战:用Mockito 5分钟搞定Service层测试 单元测试是软件工程中验证代码逻辑正确性的基础实践,其核心价值在于快速反馈与隔离验证。通过模拟(Mock)技术,开发者可以隔离外部依赖,专注于业务逻辑本身的测试,从而显著提升测试执行速度与稳定性。在Java生态中,Mockito作为主流的模拟测试框架,能够有效解决SpringBoot应用中Service层测试对外部数据库、第三方服务等不确定因素的依赖问题。结合JUnit 5,可以构建一套高效、可靠的测试防护网,确保业务代码质量。本文以用户查询场景为例,详细演示了如何使用Mockito对Service层进行快速 阅读详情

相关推荐

SpringBoot使用JUnit5实现单元测试—Mockito 模拟

Mockito是一款开源测试库,简称 Mock , 该框架允许在自动化或单元测试中模拟对象。简单来说对于某些不容易构造或者不容易获取的比较复杂的数据/场景,模拟一个虚假的Mock对象来替代真实的对象。

weixin_54009596的博客 709

单元测试mock之mockito使用

先来一个简单的例子来感受一下 外部接口类:TestService.java package com.yzl.mock; /** * 测试用服务 * * @author yangzhilong */ public interface TestService { /** * * 简单的测试服务,实现两个数相加 * * @param a ...

weixin_43821899的博客 1032

SpringBoot多模块Service层单元测试实战

SpringBoot提供了一个专门的测试插件,它能够简化测试配置,并提供一些方便的测试功能。要使用此插件,可以在Maven或Gradle的构建配置中添加相应的配置。

weixin_42443533的博客 1588

单元测试:(二) 使用 mockito 对 service 层自动化测试入门

为什么80%的码农都做不了架构师?>>> ...

weixin_34356555的博客 1135

SpringBoot项目中使用Mockito的示例代码

主要介绍了SpringBoot项目中使用Mockito的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

自偏置电流镜设计实例

自偏置电流镜设计实例 一、概述 ​ 众所周知,电流镜属于模拟电路设计中的一个基本模块,可为其他模块提供偏置电流,例如在放大器中提供偏置电流以形成尾电流源并确定直流偏置点。本文将会介绍一种自偏置的电流镜,从原理出发,并以0.18um的工艺进行设计和仿真。 二、原理 ​ 如图一所示的电路,也称之为Beta-multiply reference电路,其中M2的尺寸是M1的k倍。M3复制M4的电流,M2和M1的漏极电流相同,但是VGS并不相等。其中 VGS=2IμnCoxW/...

aonuanjiang的博客 1万+

Spring Boot单元测试使用MockBean注解向Service注入Mock对象

MockBean注解是Spring Boot提供的一个注解,用于模拟依赖对象。它的作用是在Spring上下文中创建一个模拟对象,并将其注入到被测试对象中,以便进行单元测试。

Revivedsun的专栏 8585

华三模拟器实战:IPSec VPN穿越NAT的完整配置与调试(附常见问题排查)

本文详细解析了华三模拟器中IPSec VPN穿越NAT的完整配置与调试方法,包括基础环境准备、分步配置、ACL协调策略及高级故障排查。通过实战案例和关键参数解析,帮助网络工程师解决IPSec与NAT协同工作的典型问题,提升企业网络安全性。

weixin_33724046的博客 460

关于SpringBoot框架下的service层单元测试问题(mockito)

mockito

张小挑的博客 1万+

稳定双共轭梯度法BiCGSTAB流程

稳定双共轭梯度法BiCGSTAB流程

abner361的博客 1154

CANoe LIN一致性测试之干扰测试Test moudle_LIN Disturbance Block

注意:相邻两个显隐性不同的bit不允许干扰,例如我同时选择bit6和bit7,相邻两个同显隐性的bit允许干扰,例如当我选择bit3和bit4,项,这里我选择ID:为0x2F(PID:0x6F)的frame。需按照具体测试规范实施干扰项,帧头和数据段都可以实现干扰。最近发现一个干扰测试模块,下面是一些具体使用方法。选择干扰项:PID的奇偶校验位(一致性测试干扰测试之手动测试。一个待测试frameD。

yuanyikangkang的博客 3410

Mockito编写Service层单元测试

上一篇记录了针对Controller层的单元测试,这一篇看一下针对Service层的测试,以及踩过的坑。 由于业务层代码跟公司实际业务紧密相关,不方便贴代码,如有需要的地方会简短的写几行帮助理解,总的来说有以下几个要点: Mockito框架不支持static以及非public的方法或成员变量的mock,如有需要可使用PowerMockito框架 注意大多数工具类也是static的 推荐使用Bas...

半斤米粉闯天下的博客 1万+

在 CentOS7 下安装 Cadence IC验证平台 INCISIVE152

前言 本文所使用的软件 虚拟机软件:VMware Workstation 15 PRO 如何安装? 操作系统:CentOS-7, CentOS-7-x86_64-DVD-1810.iso 如何安装? 简介 INCISIVE Incisive是nc_verilog, nc_sim, nc_lauch,以及ABV,TBV的集合,用于仿真和验证。 InstallScape InstallSc...

沈醉不知的博客 2万+

Spring Boot使用JUnit和Mockito进行Service层单元测试

在平时的开发当中,一个项目往往包含了大量的方法,可能有成千上万个。如何去保证这些方法产生的结果是我们想要的呢?那么在SpringBoot项目中我们是如何对Service层的方法进行测试的呢?本文简单讲述了单元测试是什么、为什么要写单元测试和在SpringBoot项目中我们是如何编写Service层单元测试的以及做了一个简单示例。

xiaodaidai的博客 4987

Adams软件安装与配置全攻略:从入门到机器人仿真

机械系统动力学仿真软件Adams是工业机器人开发的重要工具,其安装过程涉及许可证配置、环境变量设置等关键技术环节。专业仿真软件安装通常需要处理系统兼容性、组件依赖和授权验证等工程问题,特别是在机器人控制仿真等场景中,还需集成MATLAB/Simulink等第三方工具。本文以Windows平台为例,详解Adams安装的核心步骤,包括系统环境检查、许可证服务器配置、工业机器人专项模块安装等实践要点,并针对NVIDIA Quadro显卡优化、27500端口通信等常见问题提供解决方案,帮助用户快速搭建可靠的仿真环境

weixin_28523493的博客 199

hpm6750evk2开发板(四)TCP回送(1000M网口)

再接下来我们修改代码,先找到配置网速的地方,肯定是在enet的初始化函数里面,我们一个函数一个函数找,也可以用单步调试一步一步找,结果发现是在enet_init函数里面调用的rtl8211_basic_mode_default_config函数配置网速的,我们把enet_phy_port_speed_100mbps改为enet_phy_port_speed_1000mbps,重新编译运行试试。首先我们复制一份lwip_tcpecho代码,重命名为lwip_tcpecho_RGMII,如下图所示。

Silas1750的博客 920

Service层代码单元测试以及单元测试如何Mock

主要介绍如何对Springboot Service层代码做单元测试,以及单元测试中涉及外调服务时,如何通过Mock完成测试。

程序员小杨哥的博客 6054

自动驾驶感知新方案:YOLOv13多模态(RGB+LiDAR+热成像)融合实战

YOLOv13的RGB+LiDAR+热成像多模态融合方案,解决了自动驾驶感知的鲁棒性问题,通过跨模态特征互补和注意力融合,实现了复杂场景下的高精度检测。本文从架构设计、数据预处理、核心模块实现到车载部署,完成了全流程实战。动态模态权重:根据场景自动调整各模态的权重(如黑夜场景提升热成像权重);端到端3D检测:直接从原始点云与图像进行3D检测,减少预处理步骤;轻量化优化:针对车载设备进一步剪枝量化,提升推理速度。

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 534

Spring boot, mockito and junit – 单元测试service层

Spring boot, mockito and junit – unit test service layer 学习使用JUnit和Mockito 测试框架为Spring 应用service层编写单元测试。这个教程演示spring boot 测试service层案例。 1. M...

chuiju1776的博客 2213

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

在Spring Boot环境中使用Mockito进行单元测试_springboot mockito

这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新**

2401_84265548的博客 2281

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

SpringBoot使用JUnit5实现单元测试

单元测试(Unit Test)是为了检验程序的正确性。一个单元可能是单个程序、类、对象、方法等,它是应用程序的最小可测试部件。SpringBoot提供了 spring-boot-starter-test 启动器。通过它,能引入一些有用的测试库。在SpringBoot中进行单元测试很简单,它已经自动添加好了Test的Starter依赖。JUnit5是对程序代码进行单元测试的Java框架。它用来编写自动化测试工具,降低测试的难度、减少烦琐性、并有效避免出现程序错误。

pan_junbiao的博客 4881

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

springboot+mybatis+mockito单元测试

springboot、mybatis这里不做详细介绍,重点介绍一下mockito是什么,以及怎么与springboot、mybatis集成。 mockito是什么?举个简单例子:当service层通过调用dao层接口获取数据,然后进行数据处理。在实际做单元测试时,dao层的数据是从数据库来的,我们想自己构造一些数据跑一下service层的业务逻辑,这个时候就需要将从数据库查询的时候替换为自己构造的数据,也就是service层调用的dao层接口返回的数据需要替换为自己构造的数据,那怎么替换呢?这个时候moc

小冷在努力~ 2634

SpringBoot项目整合Mockito单元测试框架

一。简介 Mockito是什么? MOCK意思是模拟的意思,主要被用来进行数据的人工组织,不会真正地调用第三方服务器,类似redis,mysql等都不会调用,也不用关心数据底层是如何进行处理的,我们要做的只是将本单元的逻辑进行单元测试,验证数据的逻辑处理性,而其中mock较好的框架就是Mockito。 Mockito是mocking框架,它让你用简洁的API做测试。而且Mockito简单易学,它可读性强和验证语法简洁。 二。测试Demo 1.首先创建springboot项目,并在pom文件引入Mockito

爱吃鸡腿的明仔 3796

springboot使用mockito做单元测试

1.在pom.xml中添加mockito的依赖 &amp;lt;dependency&amp;gt; &amp;lt;groupId&amp;gt;org.mockito&amp;lt;/groupId&amp;gt; &amp;lt;artifactId&amp;gt;mockito-all&amp;lt;/artifactId&amp;gt; &amp;lt;version&amp

weixin_44092924的博客 3002

SpringBoot单元测试实战:JUnit5+Mockito+MockMvc构建安全代码

单元测试是软件工程中保障代码质量的核心实践,它通过隔离测试最小代码单元来验证其逻辑正确性。其原理在于模拟外部依赖,聚焦于当前组件的预期行为,从而在代码变更时快速发现回归错误。对于SpringBoot这类企业级Java框架项目,单元测试的技术价值尤为突出,它不仅是持续集成的基石,更是实现安全重构、提升工程效率的关键。在实际应用场景中,开发者常借助JUnit5作为测试框架,配合Mockito进行依赖模拟,并使用MockMvc对Web层进行集成测试,以此构建从Service到Controller的完整防护网。本文

congsikuai0611的博客 398

【SpringBoot】mockito+junit 单元测试

1.POM 引入以下依赖 <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.13.2</version> <scope>test</scope> </depende

istruth::blog 1508
上一篇: Intellij idea + TOMCAT access log实际位置
下一篇: GC日志可视化分析 & JVM状态可视化 工具整理
xerjava
博客等级 码龄12年 12粉丝 68原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值