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 {
  @Autowired
  private HelloWorld helloWorld;
    @Test
    public void contextLoads(){
          String hello= helloWorld.hello();
          System.out.println(hello);
      }
}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

伪分布Hadoop的安装与部署

1.实训目标 &#xff08;1&#xff09;熟悉掌握使用在Linux下安装JDK。 &#xff08;2&#xff09;熟悉掌握使用在Linux下安装Hadoop。 &#xff08;3&#xff09;熟悉掌握使用配置SSH免密登录。 2.实训环境与软件 环境 版本 说明 Windows 10系统 64位 操作电脑配置 …

HTML 学习笔记(一)开始

一、介绍: 首先引用百度百科的一段话作为介绍:   HTML的全称为超文本标记语言&#xff0c;是一种标记语言。它包括一系列标签&#xff0c;通过这些标签可以将网络上的文档格式统一&#xff0c;使分散的Internet资源连接为一个逻辑整体。HTML文本是由HTML命令组成的描述性文本…

[贰],万能开篇HelloWorld

1&#xff0c;新建项目 File/New/Project Android/Android Application Project 输入程序名字HelloWorld Next Next 选择Blank Activity 修改为HelloWorldActivity 2&#xff0c;异常点 2.1&#xff0c;异常1&#xff1a;No resource found that matches the given name The…

如何在Windows系统使用固定tcp公网地址ssh远程Kali系统

文章目录 1. 启动kali ssh 服务2. kali 安装cpolar 内网穿透3. 配置kali ssh公网地址4. 远程连接5. 固定连接SSH公网地址6. SSH固定地址连接测试 简单几步通过[cpolar 内网穿透](cpolar官网-安全的内网穿透工具 | 无需公网ip | 远程访问 | 搭建网站)软件实现ssh 远程连接kali! …

ubuntu23.10安装搜狗拼音

1.添加fcitx仓库 sudo add-apt-repository ppa:fcitx-team/nightly 更新: sudo apt-get update 安装fcitx sudo apt-get install fcitx fcitx安装成功 切换输入系统为fcitx

设计模式 代理模式

代理模式主要使用了 Java 的多态&#xff0c;主要是接口 干活的是被代理类&#xff0c;代理类主要是接活&#xff0c; 你让我干活&#xff0c;好&#xff0c;我交给幕后的类去干&#xff0c;你满意就成&#xff0c;那怎么知道被代理类能不能干呢&#xff1f; 同根就成&#xff…

Android14之解决报错:No module named selinux(一百九十三)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 优质专栏&#xff1a;多媒…

Win32汇编操作数据库学习

1 连接数据库 使用odbc连接&#xff1b;在此层次没有ado或dao技术&#xff0c;只有odbc&#xff1b; 先写一个asm只是连接数据库&#xff1b; .386.model flat, stdcalloption casemap :none ; case sensitiveinclude windows.inc include user32.inc includelib user32.l…

R语言复现:中国Charls数据库一篇现况调查论文的缺失数据填补方法

编者 在临床研究中&#xff0c;数据缺失是不可避免的&#xff0c;甚至没有缺失&#xff0c;数据的真实性都会受到质疑。 那我们该如何应对缺失的数据&#xff1f;放着不管&#xff1f;还是重新开始?不妨试着对缺失值进行填补&#xff0c;简单又高效。毕竟对于统计师来说&#…

深入浅出计算机网络 day.1 概论④ 计算机网络的定义和分类

不要退却&#xff0c;要绽放魅力 我的心会共鸣 和你 —— 24.3.9 一、计算机网络的定义 计算机网络早期的一个最简单定义 现阶段计算机网络的一个较好的定义 二、计算机网络的分类 按交换方式分类 按使用者分类 按传输介质分类 按覆盖范围分类 按拓扑结构分类&#xff0c;可…

【C语言】linux内核ip_generic_getfrag函数

一、讲解 这个函数ip_generic_getfrag是传输层用于处理分段和校验和的一个辅助函数&#xff0c;它通常用在IP层当需要从用户空间拷贝数据构建成网络数据包时。这个函数的实现提供了拷贝数据和进行校验和计算&#xff08;如果需要的话&#xff09;的功能。函数的参数解释如下&a…

指针--2

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言1.指针运算1.1.指针-整数1.2.指针-指针1.3.指针的关系运算 2.野指针2.1 野指针成因2.2 如何规避野指针 3.assert 断言4.指针的使用和传址调用4.1 strlen的模拟实…

汇编语言程序设计实验四

实验目的和要求 1、熟练掌握汇编语言的程序格式&#xff0c;程序设计方法&#xff1b;学会使用masm6.11对源程序进行编译、链接、调试和运行 2、利用DOS功能调用INT21H的2号和9号功能进行屏幕显示的方法。 3、利用^Break退出程序的方法及局限性。 4、汇编程序的编写 实验环…

微服务自动化管理初步认识与使用

目录 一、ETCD 1.1、ETCD简介 对于实施工程师&#xff1a; 1.2、特点 1.3. 使用场景 1.4、 关键字 1.5 工作原理 二、ETCD的安装 2.1、下载路径 2.2、介绍 2.3、具体操作 安装服务端 安装etcd客户端 测试 三、ETCD使用 3.1、前奏具体操作 3.2、 常用操作 一、ET…

递归、搜索与回溯算法简介

何为递归&#xff1a;递归就是递去归来&#xff0c;函数自己调用自己的情况。 不在意递归的细节展开图 把递归的函数当成黑盒&#xff08;给黑盒一个东西&#xff0c;它就能完成想要的事&#xff09; 相信黑盒一定能完成这个任务 深度优先遍历和深度优先搜索都是指一个东西dfs…

德国史托斯 KARL STORZ tricam SLII telecam SLII SCBI thermoflator xenen 300 维修

德国史托斯 KARL STORZ tricam SLII telecam SLII SCBI thermoflator xenen 300 维修

微信小程序-侧滑删除

简介 movable-view和movable-area是可移动的视图容器&#xff0c;在页面中可以拖拽滑动。 本篇文章将会通过该容器实现一个常用的拖拽按钮功能。 使用效果 代码实现 side-view.wtml 布局见下面代码&#xff0c;left view为内容区域&#xff0c;right view为操作按钮&a…

公众号IP白名单已添加服务器IP 122.88... 依然给出 40164 错误

公众号的IP白名单已添加 122.88... 依然给出 40164 错误。 {"errcode":40164,"errmsg":"invalid ip 122.88... ipv6 ::ffff:122.88..., not in whitelist rid: 65e85a07-458dfc0d-16003e03"} 解决方案&#xff1a; 一、检查 AppID 是否正确&…

xxl-job学习记录

1、应用场景 例&#xff1a; 某收银系统需要在每天凌晨统计前一天的财务分析、汇总 某银行系统需要在信用卡还款日前三天发短信提醒等 2、为什么需要使用任务调度 spring中提供了注解Scheduled的注解&#xff0c;这个注解也可以实现定时任务的执行 我们只需要在方法上使用这…

药业“钉”上云端:与钉钉共舞数字化新时代

在信息化、智能化的时代背景下&#xff0c;药业行业的经营管理面临着巨大的机遇与挑战。一家药业公司经营范围广泛&#xff0c;拥有各种传统药物配方&#xff0c;同时现代化的新物流线和ERP系统支持公司能够更好的运营。该药业公司与无雀科技商谈后&#xff0c;决定与钉钉平台合…