当前位置: 首页 > news >正文

Spring Boot单元测试与热部署简析

1        Spring Boot的简介

Spring Boot是一个用于构建独立的、生产级别的Spring应用程序的框架。它简化了Spring应用程序的开发过程,提供了自动配置和默认配置,使得开发者只需专注于业务逻辑的实现,而不用去关注繁琐的配置问题。

Spring Boot具有以下特点:

  1. 简化配置:Spring Boot通过自动配置机制来减少配置的工作量。它会根据项目的依赖自动配置相关的组件,开发者只需要添加依赖和一些简单的配置即可。

  2. 快速开发:Spring Boot提供了一套完整的开发工具,包括代码生成器、热部署等,可以大大加快开发速度。

  3. 微服务支持:Spring Boot天生支持微服务架构,可以方便地构建和部署独立的微服务应用程序。

  4. 内嵌服务器:Spring Boot内嵌了常见的Web服务器(如Tomcat、Jetty等),可以以独立应用程序的形式运行,不需要额外安装Web服务器。

  5. 监控和管理:Spring Boot提供了丰富的监控和管理功能,可以方便地监控应用程序的运行状态和健康状况。

2       Spring Boot的单元测试以及热部署的相关知识

Spring Boot 提供了很好的支持来编写单元测试和实现热部署。下面我将简要介绍一下这两个方面的相关知识。

2.1        单元测试: Spring Boot 使用了JUnit作为默认的单元测试框架,可以通过注解@RunWith(SpringRunner.class)来指定运行器,以便在测试过程中初始化Spring的应用上下文。 你可以使用@SpringBootTest注解标注测试类,以便在测试期间初始化Spring Boot应用的完整上下文。 你还可以使用@MockBean@Mockito等注解来模拟依赖的外部组件或服务。 另外,Spring Boot还提供了一些其他有用的注解,如@DataJpaTest@WebMvcTest等,用于测试特定领域或Web层的代码。

以下是在Spring Boot中进行单元测试和相关部署的一些常用方法和技巧:

  • 使用JUnit:JUnit是Java开发中最常用的单元测试框架之一。Spring Boot默认使用JUnit进行单元测试,可以使用@RunWith(SpringRunner.class)注解来启用Spring Boot的测试支持。可以使用@Test注解来标记测试方法。

  • 使用Mockito:Mockito是一个用于创建和管理模拟对象(mock objects)的Java库。在单元测试中,我们可以使用Mockito来模拟一些外部依赖,以便更好地控制测试环境。例如,我们可以使用Mockito来模拟数据库访问,而不是实际访问数据库。

  • 使用Spring Boot Test:Spring Boot Test提供了一系列用于测试Spring Boot应用程序的注解和类。例如,@SpringBootTest注解可以用于加载整个应用程序上下文,并进行集成测试。@WebMvcTest注解可以用于测试Web层的控制器。

  • 使用测试配置文件:Spring Boot允许我们在单元测试中使用不同的配置文件,以便更好地控制测试环境。可以使用@TestProperites注解来指定测试配置文件的路径。在测试配置文件中,我们可以覆盖一些配置项,例如数据库连接、缓存配置等。

  • 使用断言和断言库:在单元测试中,我们通常需要验证期望的结果与实际结果是否一致。可以使用JUnit的断言方法,如assertEqualsassertTrue来进行验证。此外,还可以使用一些流行的断言库,如AssertJ和Hamcrest来提供更多的断言方法。

  • 运行单元测试:在Spring Boot中,我们可以使用Maven或Gradle等构建工具来运行单元测试。可以使用mvn testgradle test命令来执行单元测试。

2.2        热部署: 在开发阶段,热部署可以使你的代码更快地重新部署和运行。Spring Boot支持两种类型的热部署:

  • 通过使用spring-boot-devtools模块,你可以在应用启动时自动配置热部署。只需将该模块添加到依赖中即可,无需进行其他配置。
  • 通过使用spring-boot-maven-plugin插件,你可以在代码改变时重新启动应用。只需在pom.xml文件中添加该插件的配置,并运行mvn spring-boot:run命令即可。
  1. 另外,热部署还有一些其他的选项和配置方式,如使用Spring Loaded或JRebel等第三方工具。

以下是一些常用的热部署技巧和方法:

  • 使用开发工具的自动重载功能:许多集成开发环境(IDE)和开发工具都提供了自动重载功能,可以自动监视代码的变化并重新加载应用程序。例如,Eclipse中的Spring Loaded插件、IntelliJ IDEA中的Spring Boot DevTools等。
  • 使用Spring Boot的开发者工具(DevTools):Spring Boot DevTools提供了一套开发者工具,可以实现热部署和快速重新启动应用程序。它会监视应用程序的类文件和资源文件的变化,并在检测到变化时自动重新加载应用程序。
  • 使用JRebel:JRebel是一个用于Java开发的工具,可以实现即时的代码热部署。它可以监视文件的变化,并将修改的类文件和资源文件重新加载到运行中的应用程序中,从而避免了重新启动应用程序。
  • 使用Docker容器:将应用程序部署在Docker容器中,可以实现快速部署和更新。通过构建一个容器镜像并运行容器,可以在容器内部使用热部署技术来更新代码。修改后的容器镜像可以轻松地重新部署到生产环境中。

使用热部署插件:一些特定的框架和工具提供了热部署插件,可以用于在开发过程中实现热部署。例如,Spring Boot的Spring Loaded插件、JRebel的插件等。这些插件通常会提供自动监视和重新加载功能,从而实现快速开发和调试。

3        效果图

4        项目搭建步骤

在prom.xml配置

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.sbl</groupId><artifactId>MavenSBlnit</artifactId><version>1.0-SNAPSHOT</version><properties><maven.compiler.source>8</maven.compiler.source><maven.compiler.target>8</maven.compiler.target></properties><parent><artifactId>spring-boot-starter-parent</artifactId><groupId>org.springframework.boot</groupId><version>2.1.3.RELEASE</version></parent><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-devtools</artifactId></dependency></dependencies></project>

在所创项目下的src.main.java的包下面建立controller包,并建立类HelloWporld

package com.sbl.controller;import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;@RestController
public class HelloWorld {@GetMapping("/hello")public String hello(){return "Hello World,i am 小孩 ";}
}

在原本创建的类下(及主项目)

package com.sbl;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class
MavenApplication {public static void  main(String[] args){SpringApplication.run(MavenApplication.class,args);}
}

在test在Java文件下的包下建立test类

package com.sbl.chapter01sbinit;import com.sbl.controller.HelloWorld;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;@RunWith(SpringRunner.class)
@SpringBootTest
public class Chapter01SbinitApplicationTests {@Autowiredprivate HelloWorld helloWorld;@Testpublic void contextLoads(){String hello= helloWorld.hello();System.out.println(hello);}
}

相关文章:

Spring Boot单元测试与热部署简析

1 Spring Boot的简介 Spring Boot是一个用于构建独立的、生产级别的Spring应用程序的框架。它简化了Spring应用程序的开发过程&#xff0c;提供了自动配置和默认配置&#xff0c;使得开发者只需专注于业务逻辑的实现&#xff0c;而不用去关注繁琐的配置问题。 Spring …...

3.12练习题解

1.台阶问题&#xff1a; 这道题目一看其实很容易想到可以用dp的板子去做&#xff0c;并且只需要用一维dp即可&#xff0c;其中dp的下标表示到达当前阶梯总共有多少种方法&#xff0c;由于结果有可能会很大所以一定要记得边记录边模&#xff0c;代码实现如下&#xff1a; #incl…...

Java中实现双向链表

一、目标 最近项目中实现双向链表&#xff0c;同时转为满二叉树。 二、代码 用java实现双向链表的代码如下&#xff1a; class TreeNode {int val;TreeNode left;TreeNode right;TreeNode(int x) { val x; } }public class FullBinaryTree {public TreeNode createTree(int[…...

【DevOps实战之k8s】使用Prometheus和Grafana监控K8S集群

【DevOps实战之k8s】使用Prometheus和Grafana监控K8S集群 目录 【DevOps实战之k8s】使用Prometheus和Grafana监控K8S集群系统架构Kubernetes集群指标抓取指标可视化警告PromQL示例按命名空间统计集群中的Pod数按命名空间重启Pod未就绪的PodCPU过度使用Memory过度使用健康的集群…...

【读论文】【精读】3D Gaussian Splatting for Real-Time Radiance Field Rendering

文章目录 1. What&#xff1a;2. Why&#xff1a;3. How&#xff1a;3.1 Real-time rendering3.2 Adaptive Control of Gaussians3.3 Differentiable 3D Gaussian splatting 4. Self-thoughts 1. What&#xff1a; What kind of thing is this article going to do (from the a…...

JVM理解学习

参考视频 JVM架构总览图 程序计数器 程序计数器&#xff0c;物理上用寄存器实现。 作用&#xff1a; 记住下一条JVM指令的执行地址 特点&#xff1a; 1 是线程私有的&#xff0c;随着线程的创建而创建&#xff0c;随着线程的消息而消息 2 是一小块内存 3 唯一不会内存溢出的地方…...

使用 Ruby 或 Python 在文件中查找

对于经常使用爬虫的我来说&#xff0c;在大多数文本编辑器都会有“在文件中查找”功能&#xff0c;主要是方便快捷的查找自己说需要的内容&#xff0c;那我有咩有可能用Ruby 或 Python实现类似的查找功能&#xff1f;这些功能又能怎么实现&#xff1f; 问题背景 许多流行的文本…...

python实现冒泡排序

冒泡排序是一种简单的排序算法&#xff0c;它重复地遍历要排序的数列&#xff0c;一次比较两个元素&#xff0c;如果他们的顺序错误就把他们交换过来。遍历数列的工作是重复地进行直到没有再需要交换&#xff0c;也就是说该数列已经排序完成。 以下是用Python实现冒泡排序的代…...

大数据开发(HBase面试真题-卷二)

大数据开发&#xff08;HBase面试真题&#xff09; 1、HBase读写数据流程&#xff1f;2、HBase的读写缓存&#xff1f;3、在删除HBase中的一个数据的时候&#xff0c;它什么时候真正的进行删除呢&#xff1f;4、HBase的一个region由哪些东西组成&#xff1f;5、HBase的rowkey为…...

基于springboot+vue的线上教育系统(源码+论文)

目录 前言 一、功能设计 二、功能实现 三、库表设计 四、论文 前言 现在大家的生活方式正在被计算机的发展慢慢改变着&#xff0c;学习方式也逐渐由书本走向荧幕,我认为这并不是不能避免的,但说实话,现在的生活方式与以往相比有太大的改变&#xff0c;人们的娱乐方式不仅仅…...

01-shell的自学课-基础变量学习

一、echo变量的一个坑 声明【临时变量】&#xff0c;然后打印出来&#xff1b;&#xff08;拓展&#xff1a;env是linux的全局变量&#xff09; [rootgong ~]# xinjizhiwashell [rootgong ~]# echo $xinjizhiwa shell [rootgong ~]# echo $xinjizhiwa-haha shell-haha [rootgo…...

鸿蒙Harmony应用开发—ArkTS声明式开发(基础手势:Span)

作为Text组件的子组件&#xff0c;用于显示行内文本的组件。 说明&#xff1a; 该组件从API Version 7开始支持。后续版本如有新增内容&#xff0c;则采用上角标单独标记该内容的起始版本。 该组件从API Version 10开始支持继承父组件Text的属性&#xff0c;即如果子组件未设置…...

前端框架的演进之路:从静态网页到现代交互体验的探索

前端框架的发展史 随着互联网的快速发展&#xff0c;前端技术也在不断进步&#xff0c;前端框架作为前端开发的重要工具&#xff0c;经历了从简单到复杂、从单一到多元的演变过程。本文将回顾前端框架的发展史&#xff0c;探讨其变迁背后的原因和趋势。 一、静态网页时代 在…...

在Linux/Ubuntu/Debian中设置字体

下载字体。 下载你喜欢的字体&#xff0c;双击并安装。 之后更新字体缓存&#xff1a; fc-cache -f -v安装 GNOME 调整。 GNOME Tweaks 是一个工具&#xff0c;允许你自定义 GNOME 桌面环境的各个方面&#xff0c;包括字体。 如果你还没有安装 GNOME Tweaks&#xff1a; …...

Python 常用内置函数,及实例演示

Python的内置函数非常强大&#xff0c;可以帮助你完成各种任务。以下是20个非常有用的Python内置函数及其使用实例&#xff1a; 1. abs() 返回数字的绝对值。 print(abs(-5)) # 输出&#xff1a;52. all() 如果迭代器的所有元素都为真&#xff08;或迭代器为空&#xff09…...

C++标准输入输出和名字空间

C标准输入输出和名字空间 标准输入输出 在C中&#xff0c;标准输入输出&#xff08;I/O&#xff09;是通过标准库中的iostream库来实现的&#xff0c;它提供了一套流&#xff08;stream&#xff09;抽象来进行数据的输入和输出操作。这套流抽象包括输入流用于读取数据&#x…...

hive逗号分割行列转换

select * from ( select back_receipt_nos,order_no,reject_no from ods_oneplus.ods_us_wms_reject_order_match_all_d where order_no 10150501385980001 ) t1 lateral view explode(split(t1.back_receipt_nos, ,)) t as back_receipt_no where 1 1;...

Jenkins插件Parameterized Scheduler用法

Jenkins定时触发构建的同时设定参数。可以根据不同的定时构建器设置不同参数或环境变量的值。可以设置多个参数。并结合when控制stage流程的执行。结合when和triggeredBy区分定时构建的stage和手动执行的stage。 目录 什么是Parameterized Scheduler&#xff1f;如何配置实现呢…...

西门子S7.NET通信库【读】操作详解

在使用西门子PLC进行工业自动化控制的过程中&#xff0c;经常需要与PLC进行数据交换。S7.NET是一款广泛应用于.NET平台的西门子PLC通信库&#xff0c;它为开发者提供了一系列的API函数&#xff0c;以便在C#、VB.NET等.NET语言中轻松实现与西门子PLC的数据交互。本文将详细介绍如…...

Qt/C++音视频开发69-保存监控pcm音频数据到mp4文件/监控录像/录像存储和回放/264/265/aac/pcm等

一、前言 用ffmpeg做音视频保存到mp4文件&#xff0c;都会遇到一个问题&#xff0c;尤其是在视频监控行业&#xff0c;就是监控摄像头设置的音频是PCM/G711A/G711U&#xff0c;解码后对应的格式是pcm_s16be/pcm_alaw/pcm_mulaw&#xff0c;将这个原始的音频流保存到mp4文件是会…...

我从怀疑交智商税到真香,2026这款会议纪要自动生成软件真后悔没早用

上周开完3小时季度复盘会&#xff0c;散会leader丢一句“下班前把纪要整理好发我”&#xff0c;我对着录音逐句听了两个小时&#xff0c;错漏还一堆&#xff1b;上次跟客户谈合作&#xff0c;整理录音时把客户要求的交付时间写错&#xff0c;差点误事&#xff1b;做用户访谈录了…...

电商人必备!AI净界RMBG-1.4批量处理商品图,效率提升10倍

电商人必备&#xff01;AI净界RMBG-1.4批量处理商品图&#xff0c;效率提升10倍 1. 电商人的痛点&#xff1a;每天被抠图折磨的日子 做电商的朋友&#xff0c;下面这个场景你一定不陌生&#xff1a; 早上9点&#xff0c;运营发来50张新款T恤的实拍图&#xff0c;要求今天下班…...

排序(五)【数据结构】

快速排序 核心思想 将待排序序列&#xff0c;围绕着基本值分成两部分&#xff0c;左边部分都小于基准值&#xff0c;右边部分都大于基准值 第一种方法&#xff1a;递归 优点:简单 缺点:需要单独开辟辅助空间brr数组 第二种方法&#xff1a;挖空法&#xff08;很重要&…...

OpenClaw监控方案:Qwen3-4B模型API健康检查自动化

OpenClaw监控方案&#xff1a;Qwen3-4B模型API健康检查自动化 1. 为什么需要模型API监控 上周我的个人自动化流程突然中断了整整8小时——直到第二天早上查看日志才发现是Qwen3-4B模型API服务崩溃了。这个教训让我意识到&#xff1a;本地部署的大模型也需要像云服务一样建立健…...

HY-Motion 1.0未来演进:支持多人协同与简单物体交互的路线图解析

HY-Motion 1.0未来演进&#xff1a;支持多人协同与简单物体交互的路线图解析 1. 引言&#xff1a;从单人到互动的跨越 HY-Motion 1.0的发布&#xff0c;让文字描述转化为流畅、逼真的3D人体动作变得触手可及。无论是健身动作、日常行为还是复杂的舞蹈编排&#xff0c;这个十亿…...

Mac开发环境神器:OpenClaw+千问3.5-27B调试日志分析

Mac开发环境神器&#xff1a;OpenClaw千问3.5-27B调试日志分析 1. 为什么开发者需要日志分析助手 作为一个长期在Mac上折腾各种开发环境的程序员&#xff0c;我经历过太多深夜调试的痛苦时刻。那些密密麻麻的终端日志输出&#xff0c;往往包含着关键错误线索&#xff0c;但要…...

如何用Synonyms实现智能问答系统:面向初学者的完整指南

如何用Synonyms实现智能问答系统&#xff1a;面向初学者的完整指南 【免费下载链接】Synonyms :herb: 中文近义词&#xff1a;聊天机器人&#xff0c;智能问答工具包 项目地址: https://gitcode.com/gh_mirrors/sy/Synonyms Synonyms是一个强大的中文近义词工具包&#…...

嵌入式CLI框架:轻量级树形命令行调试系统

1. 项目概述debug-cli是一个专为嵌入式系统设计的轻量级、模块化、面向对象的调试命令行接口&#xff08;CLI&#xff09;框架。它不依赖标准C库的stdio或动态内存分配&#xff0c;完全适配资源受限的MCU环境&#xff08;如 Cortex-M0/M3/M4、RISC-V 32位内核&#xff09;&…...

无GPU解决方案:OpenClaw远程调用百川2-13B-4bits云端实例

无GPU解决方案&#xff1a;OpenClaw远程调用百川2-13B-4bits云端实例 1. 为什么选择远程调用方案 去年我尝试在MacBook Pro上本地部署百川2-13B模型时&#xff0c;遇到了显存不足的问题。即使使用量化版本&#xff0c;我的16GB内存笔记本也无法流畅运行推理。这促使我开始探索…...

大学物理(Ⅱ)核心公式解析与应用指南

1. 电磁学核心公式解析与应用 电磁学是大学物理&#xff08;Ⅱ&#xff09;的重要组成模块&#xff0c;其中包含多个关键公式。我们先从法拉第电磁感应定律说起&#xff0c;这个定律揭示了变化的磁场如何产生电场。在实际应用中&#xff0c;比如发电机的工作原理就基于此。公式…...