junit mockito Dao层

Dao层单元测试需要启动服务的上下文

业务逻辑需要别名进行MOCK打桩

为了不影响测试结果和对数据库产生脏数据,使用@Sql注解来完成相关数据的初始化和清除

Dao

public interface BranchDao extends BaseDao<BranchPO, Long> {@Modifying@Transactional@Query(nativeQuery = true,value = "update T_BRANCH_INFO set ADDRESS=?2, UPDATE_DATE=sysdate where BRANCH_NO=?1")int updateAddressByBranchNo(Long branchNo, String address);}

Service Impl

@Slf4j
@Service
public class BranchServiceImpl implements BranchService {@Autowiredprivate BranchRepository branchRepository;@Overridepublic boolean updateAddressByBranchNo(Long branchNo, String address) {if (branchNo == null || address == null) {return false;}try {return branchRepository.updateAddressByBranchNo(branchNo, address) > 0;} catch (Exception e) {log.error("修改营业部的地址异常, branchNo={}, address={}", branchNo, address, e);}return false;}
}

BaseTest

@RunWith(SpringRunner.class)
@SpringBootTest(classes = Application.class)
public class BaseTest extends Mockito {
}

Test

@Slf4j
public class BranchServiceImplTest extends BaseTest {@Autowired//Autowired为了上下文测试private BranchServiceImpl branchService;@InjectMocks//InjectMocks启个别名Mock打桩单元测试private BranchServiceImpl mockBranchService;@Mockprivate BranchRepository branchRepository;@Beforepublic void init() {MockitoAnnotations.initMocks(this);}@Testpublic void updateAddressByBranchNo_NullBranchNo_ReturnsFalse() {boolean result = branchService.updateAddressByBranchNo(null, "123 Main St");Assert.assertFalse(result);}@Testpublic  void updateAddressByBranchNo_NullAddress_ReturnsFalse() {boolean result = branchService.updateAddressByBranchNo(1L, null);Assert.assertFalse(result);}@Test@SqlGroup({@Sql(statements = {"insert into t_branch_info(id,branch_no,branch_name,address) values(seq_branch_info.nextval,100,'营业部名称','营业部地址')"},executionPhase = Sql.ExecutionPhase.BEFORE_TEST_METHOD),@Sql(statements = {"delete t_branch_info where branch_no=100"},executionPhase = Sql.ExecutionPhase.AFTER_TEST_METHOD)})public void updateAddressByBranchNo_Success_ReturnsTrue() {BranchInfoVO vo = branchService.findByBranchNo(100L);Assert.assertEquals("营业部名称",vo.getBranchName());Assert.assertEquals("营业部地址",vo.getAddress());boolean result = branchService.updateAddressByBranchNo(100L, "123 Main St");Assert.assertTrue(result);vo = branchService.findByBranchNo(100L);Assert.assertEquals("123 Main St",vo.getAddress());}@Testpublic  void updateAddressByBranchNo_Update_ReturnsFalse() {boolean result = branchService.updateAddressByBranchNo(100L, "123 Main St");Assert.assertFalse(result);}@Testpublic  void updateAddressByBranchNo_Exception_ReturnsFalse() {when(branchRepository.updateAddressByBranchNo(anyLong(),anyString())).thenThrow(new RuntimeException());boolean result = mockBranchService.updateAddressByBranchNo(100L, "123 Main St");Assert.assertFalse(result);}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/29955.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【机器学习】机器学习重要方法——无监督学习:理论、算法与实践

文章目录 引言第一章 无监督学习的基本概念1.1 什么是无监督学习1.2 无监督学习的主要任务 第二章 无监督学习的核心算法2.1 聚类算法2.1.1 K均值聚类2.1.2 层次聚类2.1.3 DBSCAN聚类 2.2 降维算法2.2.1 主成分分析&#xff08;PCA&#xff09;2.2.2 t-SNE 2.3 异常检测算法2.3…

Java new HashMap 指定容量,代码怎么写? 学习源码小记

之前针对 创建map 指定容量&#xff0c;写过一篇吐槽教学文章&#xff1a;HashMap 使用的时候指定容量&#xff1f;你真的用明白了吗&#xff1f;&#xff08;值得一阅&#xff09;_new hashmap<>(4);-CSDN博客 因为我们经常要通过代码做一些数据的分组&#xff0c;比如查…

深入理解网络协议——搞懂协议在系统中的应用

1. 不精确指明的协议软件接口 在多数实现中&#xff0c;TCP/IP协议软件驻留在计算机的操作系统中。因此&#xff0c;只要应用程序使用TCP/IP通信&#xff0c;它就必须与操作系统交互并请求其服务。从程序员的观点看&#xff0c;操作系统所提供的那些例程定义了应用程序和协议软…

重庆地区媒体宣传邀约资源整理

传媒如春雨&#xff0c;润物细无声&#xff0c;大家好&#xff0c;我是51媒体网胡老师。 重庆地区媒体宣传邀约资源整理 一、主流媒体资源 电视台&#xff1a;重庆电视台&#xff1a;作为重庆地区最具影响力的电视媒体之一&#xff0c;拥有多个频道&#xff0c;涵盖新闻、综艺…

C#面:C#中有没有静态构造函数,如果有是做什么用的?

在C#中是存在静态构造函数的&#xff0c;它被称为静态构造器&#xff08;static constructor&#xff09;。静态构造函数是一种特殊的构造函数&#xff0c;用于初始化静态成员变量或执行一些静态初始化操作。它与普通的实例构造函数不同&#xff0c;静态构造函数没有参数&#…

数据提取的艺术:如何通过数据治理提高效率

数据提取的艺术&#xff1a;如何通过数据治理提高效率 在当今数字化浪潮下&#xff0c;数据已成为企业最重要的资产之一。然而&#xff0c;如何从海量的数据中提取有价值的信息&#xff0c;并将其转化为实际的业务效益&#xff0c;却是一个挑战。数据治理&#xff0c;作为确保…

在 Qt Quick 中的布局:Grid,Row

Grid 在 Qt Quick 中&#xff0c;网格布局可以使用 Grid 元素来实现。Grid 元素允许您以网格形式对子元素进行布局&#xff0c;类似于 HTML 中的表格布局。以下是一个简单的示例&#xff0c;展示如何在 QML 中使用网格布局&#xff1a; import QtQuick 2.0Grid {columns: 3 /…

python-日历库calendar

目录 打印日历 基本日历类Calendar TextCalendar类 HTMLCalendar类 打印日历 设置日历每周开始日期(周几) import calendarcalendar.setfirstweekday(calendar.SUNDAY) # 设置日历中每周以周几为第一天显示 打印某年日历 print(calendar.calendar(2024, w2, l1, c6, m…

flutter实现UDP发送魔法包唤醒主机

魔法包 魔法包是用16进制表示的数据包&#xff0c;它是由固定的前缀数据(FFFFFFFFFFFF)以及固定重复次数(16次)的目标主机MAC地址组成。 假设目标主机的MAC地址是&#xff1a;"50:eb:f6:27:ae:a8" 那么魔法包就是[FFFFFFFFFFFF50EBF627AEA850EBF627AEA850EBF627AEA8…

数据结构与算法笔记:基础篇 - 分治算法:谈一谈大规模计算框架MapReduce中的分治思想

概述 MapReduce 是 Google 大数据处理的三姐马车之一&#xff0c;另外两个事 GFS 和 Bigtable。它在倒排索引、PageRank 计算、网页分析等搜索引擎相关的技术中都有大量的应用。 尽管开发一个 MapReduce 看起来很高深。实际上&#xff0c;万变不离其宗&#xff0c;它的本质就…

重磅!首个跨平台的通用Linux端间互联组件Klink在openKylin开源

随着智能终端设备的普及&#xff0c;多个智能终端设备之间的互联互通应用场景日益丰富&#xff0c;多设备互联互通应用场景需要开发者单独实现通讯协议。因此&#xff0c;为解决跨平台互联互通问题&#xff0c;由openKylin社区理事单位麒麟软件旗下星光麒麟团队成立的Connectiv…

<provider>标签的android:authorities属性,和androidx.appcompat.androidx-startup库有什么关系?

<provider> 标签的 android:authorities 属性在 Android 中是用于唯一标识一个 ContentProvider 的。这与库或特定的组件&#xff08;如 androidx.appcompat&#xff09;本身并没有直接的关系&#xff0c;除非该库或组件内部定义了一个 ContentProvider 并指定了它的 aut…

2024下《网络工程师》50个高频考点汇总,背就有效!

宝子们&#xff01;上半年软考已经结束一段时间了&#xff0c;准备考下半年软考中级-网络工程师的小伙伴们可以开始准备了&#xff0c;这里给大家整理了50个高频考点&#xff0c;涵盖全书90%以上重点&#xff0c;先把这个存下&#xff01;再慢慢看书&#xff0c;边看书边背这个…

数据治理创新路:建设数据集市,强化数据报送一致性新实践

随着信息化和数字化的飞速发展&#xff0c;数据已经成为企业运营和决策的核心要素。然而&#xff0c;数据治理的复杂性和多样性给企业带来了不小的挑战。为了更好地应对这些挑战&#xff0c;许多企业开始探索数据治理的创新路径&#xff0c;其中建设数据集市和强化数据报送一致…

各类存储器类型(RAM、ROM、FLASH、DRAM、SRAM)

1 计算机存储类型构成 在计算机中&#xff0c;各类存储器构成了计算机能高速高效运转程序的基石。 计算机的存储体系中&#xff0c;从速度慢到速度快对应着容量大到小&#xff0c;也就是说&#xff0c;速度越快容量越小&#xff1b;容量越大的&#xff0c;速度越慢。两者互相…

C# OpenCvSharp 矩阵计算-compare、repeat、PSNR、cross、dot

🌟详细解释OpenCV函数🌟 在这篇文章中,我将详细解释并给出每个函数的示例,包括运算过程和运算结果。💻✨ 🔍函数:compare 定义: void compare(InputArray src1, InputArray src2, OutputArray dst, int cmpop); 参数: src1:输入图像或矩阵 src2:输入图像或矩阵…

mtk android开机及重启速度优化

zygote&#xff1a;预加载类和资源。加载过多会影响开机时间。 查看 /sdcard/mtklog/bootprof 文件。减少预加载的类和资源&#xff0c;确保没有冗余的资源图片。开机动画进程&#xff1a;bootanimation 或 mtkbootanimation&#xff0c;走 android 流程比 movie 流程占用内存资…

java 判断字符串是否以两个中文字符开头

在Java中&#xff0c;可以使用正则表达式来判断一个字符串是否以两个中文字符开头。 以下是一个简单的Java代码示例&#xff1a; public class Main {public static void main(String[] args) {String testString "中文字符开头的文本";boolean isChineseCharacte…

JavaScript算法题

排序算法 1.冒泡排序 从开始位置两两比较&#xff0c;持续n轮 // 冒泡排序let bubbleSort (arr) > {const len arr.lengthfor (let i 0; i < len - 1; i) {// 外层循环控制轮数for (let j 0; j < len - i - 1; j) {// 内层循环控制比较次数if (arr[j] > arr[…

Unity3D 打造3D路径编辑系统详解

在Unity3D中打造3D路径编辑系统&#xff0c;对于游戏开发者来说是一项重要且实用的任务。无论是实现敌人的AI巡逻、角色的自定义移动路线&#xff0c;还是物体的动态轨迹&#xff0c;一个强大的路径编辑系统都能大大提高开发效率。本文将详细介绍如何使用Unity3D打造一个3D路径…