Spring boot test

SpringBootTest单元测试应用 前言: 为什么需要使用单元测试??? 保证历史版本代码的正确性,减少重复测试:开发人员实现某个功能或者修补了某个bug,如果有相应的单元测试支持的话,开发人员可以马上通过运行单元测试来验证之前完成的代码是否正确; 提升测试效率:对于依赖多,业务流程复杂,可以通过mock去掉依赖,保证自己编写函数的正确性; 便于后期重构:保单元测试可以为代码的重构提供保障,只要重构代码之后单元测试全部运行通过,那么在很大程度上表示这次重构没有引入新的BUG,当然这是建立在完整、有效的... 阅读详情

Spring boot test

上一节 Spring boot servlet,filter,Listener,Interceptor

Spring boot servlet,filter,Listener,Interceptor

源码

源码链接


Test 框架简单说明使用

这里只是简单介绍了java中的测试框架的断言使用,更多应用或者深入使用,请自行查阅。

测试类规范: 测试类 以Test 结尾, 测试方法以test 开头,并且是public void 的
测试注解

  • @Test
    标注为一个测试方法
  • @Before
    标注到普通方法,每个test方法执行前执行
  • @After
    标注到普通方法,每个test方法执行后执行
  • @BeforeClass
    标注到 static 方法上,在该test类中的test方法执行之前执行,多个test方法执行只执行一次
  • @AfterClass
    标注到 static 方法上,在该test类中的test方法执行之后执行,多个test方法执行只执行一次

示例

    // 标注到普通方法,每个test方法执行前执行
    @Before
    public void testBefore() {
        System.out.println("testBefore");
    }

    // 标注到普通方法,每个test方法执行后执行
    @After
    public void testAfter() {
        System.out.println("testAfter");
    }

    // 标注到 static 方法上,在该test类中的test方法执行之前执行,多个test方法执行只执行一次
    @BeforeClass
    public static void testBeforeClass() {
        System.out.println("beforeClass");
    }

    // 标注到 static 方法上,在该test类中的test方法执行之后执行,多个test方法执行只执行一次
    @AfterClass
    public static void testAfterClass() {
        System.out.println("testAfterClass");
    }

    // 断言 junit 框架
    @Test
    public void test01() {
        System.out.println("test01...");
        // 写一些断言
        Assert.assertEquals("1", "1");
    }

Junit Test Assert

使用junit 断言

代码示例

 // 断言 junit 框架
    @Test
    public void test01() {
        System.out.println("test01...");
        //
        Assert.assertEquals("1", "1");
        Assert.assertEquals("预期的和实际的不相符", "1", "12");
        Assert.assertNotNull(new Object());
        Assert.assertNull(null);
        Assert.assertTrue(true);
        Assert.assertFalse(false);
        // 断言预期值 是否满足某些匹配条件, 这里使用了hamcrest
//        Assert.assertThat(1, Matchers.greaterThan(0));

    }

junit 断言提供了一些常规的 assert ,进行预期值和实际值的匹配以及异常信息指定

hamcrest Assert

hamcrest 相对能进行更多的模式匹配 Matchers

代码示例


    // 断言 hamcrest 框架, 模式匹配
    @Test
    public void test02() {
        System.out.println("test02...");
        MatcherAssert.assertThat(0, Matchers.equalTo(0));
        MatcherAssert.assertThat("预期的值应该和输入值相等", 0, Matchers.equalTo(0));
        MatcherAssert.assertThat(0, Matchers.allOf(Matchers.greaterThanOrEqualTo(0), Matchers.notNullValue()));
    }

AssertJ Assert

AssertJ 是一种可进行流式断言风格的断言框架
代码示例

   // 流式断言 AssertJ
    @Test
    public void test03() {
        Assertions.assertThat(0)
                .isGreaterThan(-1)
                .isBetween(-100, 100)
                .isNotNull();
    }

Mockito

mock 可以模拟各个未实现或未完成的方法来指定应该返回什么值;特别测试联调的时候依赖其他服务 造成流程不通时使用。
代码示例

    @Test
    public void testMock() {
        // mock 一个对象
        TestService mock = Mockito.mock(TestService.class);
        // 模拟 TestServiceMock方法 当传入aaa 的时候输出5
        Mockito.when(mock.strLength("aaa")).thenReturn(5) // 第一次返回5
                .thenReturn(2) // 第二次调用返回2
                .thenReturn(1) // 第三次调用 返回1
                .then( invocation -> { // 第四次调用 通过 invocation.callRealMethod()调用真实方法返回值
                    System.out.println("调用真实方法返回值 = " + invocation.callRealMethod());
                    return invocation.callRealMethod(); })
                .thenThrow(new RuntimeException("调用超过4次")); // 超过4次后报错
        //
        for (int i = 0; i < 4; i++) {
            System.out.println(mock.strLength("aaa")); // 返回3

        }
        System.out.println(mock.strLength("a")); // 其他都是 0
        // 模拟真实的对象调用返回值
        Integer spyMockLength = Mockito.spy(TestService.class).strLength("234234234234");
        System.out.println(spyMockLength);
        // 验证 mock 模拟调用了TestService.strLength 方法几次
        Mockito.verify(mock, Mockito.times(4));

        // 重置mock
        Mockito.reset(mock);

    }

json Assert

验证json 是否一致

    // json assert; 验证json 数据是否匹配
    @Test
    public void testJsonAssert() throws JSONException, JsonProcessingException {
        ObjectMapper objectMapper = new ObjectMapper();
        Map<String, Integer> testMap = new HashMap<>();
        testMap.put("a",1);
        testMap.put("b",2);
        JSONAssert.assertEquals( objectMapper.writeValueAsString(testMap), "{\"a\":2,\"b\":2}", true);
    }

JsonPath

解析json 可以通过jsonPth 规定的方式获取响应的json值
代码示例

    // json path   详细规则参考:https://github.com/json-path/JsonPath
    // 可以获取json中的值进行验证
    @Test
    public void testJsonPath() throws Exception {
        ObjectMapper objectMapper = new ObjectMapper();
        Map<String, Integer> testMap = new HashMap<>();
        testMap.put("a",1);
        testMap.put("b",2);
        Object aValue = JsonPath.read(objectMapper.writeValueAsString(testMap), "$.a");
        System.out.println(aValue);
    }

以上简述了 在junit中常用的一些框架

spring Test 在springboot项目中使用 Test

使用spring test 可以模拟在spring环境中进行测试用例的编写。

首先需要加入 springboot test 以来

 <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
        </dependency>

测试类加入注解:
@SpringBootTest(classes = {StartApplication.class}) classes 指定资源类,一般就是springboot 启动类
@RunWith(SpringRunner.class) 运行在什么环境

加入这两个注解 我们启动测试的时候就是一个spring的环境

示例

@SpringBootTest(classes = {StartApplication.class})
@RunWith(SpringRunner.class)
public class SpringTest {


    @Autowired
    private TestService testService;


    @Test
    public void testStr() throws Exception {
        Assert.assertEquals(testService.strLength("123"), Integer.valueOf(3));
    }

我们可以通过@Autowired 自动注入spring bean ; TestService 是被@Service 标注的

Spring Mock

更多的时候我们可能会测试controller ;频繁的启动重启项目也不太合适;所以我们可以使用mock进行模拟

  1. 添加注解 @AutoConfigureMockMvc
@AutoConfigureMockMvc
public class SpringTest {
  1. 编写controller
@RestController
@RequestMapping("test")
public class TestController {

    @GetMapping
    public String strToUp(String str) throws Exception {
        return str.toUpperCase();
    }

    @PostMapping
    public Map<String, Object> postMap(@RequestBody Map<String, Object> param) throws Exception {
        System.out.println("param = " + param);
        Map<String ,Object> newParam = new HashMap<>();

        param.forEach((k,v) -> {
            newParam.put(k.toUpperCase(), v);
            newParam.put(k.toUpperCase(), v);
        });
        return newParam;
    }
}

mock 模拟调用TestController 中的方法
3. 代码示例
mock get请求

    @Test
    public void testControllerGet() throws Exception {
        MvcResult mvcResult
                = mockMvc.perform(MockMvcRequestBuilders.get("/test")
                .param("str", "param")  // 设置请求参数
                .contentType(MediaType.APPLICATION_JSON_UTF8) // contentType
                .accept(MediaType.APPLICATION_JSON_UTF8)) // 接收的contentType
                .andExpect(ResultMatcher.matchAll(  // 预期
                        status().isOk())) // 预期httpStatus 是ok 200 的
                .andDo(print()) // 打印相关信息
                .andReturn();
    }

mock post请求

    @Test
    public void testControllerPost() throws Exception {
        Map<String, Object> param = new HashMap<>();
        param.put("p1","v1");
        param.put("p2", "v2");
        ObjectMapper objectMapper = new ObjectMapper();
        mockMvc.perform( // 请求信息
                post("/test")
                        .characterEncoding(StandardCharsets.UTF_8.name())
                        .contentType(MediaType.APPLICATION_JSON_UTF8)
                        .content(objectMapper.writeValueAsString(param)))
                .andExpect( // 断言
                        ResultMatcher.matchAll(
                                //  httpStatus 是否是200
                                status().isOk(),
                                // 断言 content-type
                                content().contentType(MediaType.APPLICATION_JSON_UTF8),
                                // 返回值转换为json  和输入的 值转换为json  他们相同
                                content().json(objectMapper.writeValueAsString(param)),
                                // 解析json,提取json数据中的变量是否和预期的value一致
                                jsonPath("$.P1").value("v1")))
                .andDo(print()); // 执行一些后续操作

    }

下一节 Spring boot mybatis

Spring boot mybatis

Spring Boot Test 系列1 - 入门 文章目录Sprint Boot Test 系列1 - 入门前言创建Spring Boot项目Spring Boot Starter Test依赖集成测试集成测试,不启动server集成测试,启动server单元测试后记参考文档 Sprint Boot Test 系列1 - 入门 前言 本文为Spring Boot Test系列的第一篇的入门文章。 工具: Intellij IDEA Ultimate Spring Boot 2.4.0 JUnit5 (Spring Boot Test 2.4.0默认为JU 阅读详情

相关推荐

Spring Boot 教程 - Test

1. 应用测试的介绍 一般我们在写完代码之后,代码的测试是会给专门的测试人员来测试的,如果一个测试跑到你的工位上对你说,你的代码好像有Bug,你肯定会不爽,反正我就是这样的????。所以为了显示自己的代码质量高一点,在功能提交给测试之前,我们会自己测试一下,接下来给大家介绍一下 Spring Boot Test 应用测试框架。 Spring Boot Test 其实就是Spring Test,只是在Spring Boot 中集成变得更简单了,像我们开发自己测试,一般都是单元测试Junit测试,不出bug就谢

m0_47870360的博客 1080

Spring Boot Test介绍

一、Spring Boot Test介绍 Spring Test与JUnit等其他测试框架结合起来,提供了便捷高效的测试手段。而Spring Boot Test 是在Spring Test之上的再次封装,增加了切片测试,增强了mock能力。 整体上,Spring Boot Test支持的测试种类,大致可以分为如下三类: 单元测试:一般面向方法,编写一般业务代码时,测试成本较大。涉及到的注解有@Test。 切片测试:一般面向难于测试的边界功能,介于单元测试和功能测试之间。涉及到的注解有@RunWith

qq_57756904的博客 5万+

Demo project for Spring Boot 【1】spring-boot-starter【2】spring-boot-starter-test

spring-boot-starter-test是Spring Boot框架中的一个模块,用于支持在测试环中进行单元测试和集成测试。它提供了一些常用的测试工具和注解,使得编写和运行测试变得更加简单和高效。spring-boot-starter-test是Spring Boot框架中的一个模块,提供了一些用于测试的依赖和工具,方便开发者进行单元测试和集成测试。总之,spring-boot-starter-test使得开发者能够更加方便地编写和运行各种类型的测试,并且提供了一些常用的测试工具和依赖的自动配置。

[Blog][Domain] programb.blog.youkuaiyun.com 696

SpringBoot Test及注解详解(含Mockito)

一、版本差异 Spring Boot 2.2.0 版本开始引入 JUnit 5 作为单元测试默认库,在 Spring Boot 2.2.0 版本之前,spring-boot-starter-test 包含了 JUnit 4 的依赖,Spring Boot 2.2.0 版本之后替换成了 Junit Jupiter。 pom.xml <dependency> <groupId>org.springframework.boot</groupId&g

cristianoxm的博客 6万+

SpringBoot编程基础教程:Spring Boot Test

作者:禅与计算机程序设计艺术 1.背景介绍 Spring Boot Test简介 测试是一个软件开发过程中的重要环节,它可以帮助我们检测出软件代码中存在的问题、错误或漏洞,提高软件质量,确保软件的可靠性和可用性。在Java开发领域,J

AI天才研究院 609

【实战指南】OpenClaw 使用 Bird Skill 接入 X(Twitter)的终极省心方案:告别每次都要手动喂 Cookie 的痛苦

OpenClaw 使用 Bird Skill 接入 X(Twitter)的终极省心方案:告别每次都要手动喂 Cookie 的痛苦

hampeter的博客 1798

SpringBoot Test详解

spring-boot-test项目:包含核心功能spring-boot-test-autoconfigure项目:支持自动配置通常情况下,我们通过spring-boot-starter-test的Starter来引入SpringBoot的核心支持项目以及单元测试项目以及单元测试库。JUnit:一个Java语言的单元测试框架:为SpringBoot应用提供集成测试和工具支持:支持流式断言的Java测试框架Hamcrest:一个匹配器库Mockito:一个Java Mock框架。

吴声子夜歌的博客 1万+

病理WSI配准库valis教程

病理WSI配准库valis教程

azrealq的博客 2598

spring-boot-test与 spring-boot-starter-test 区别

关系“购物车”“购物车里的一个商品”你的操作把整个“购物车”()加入项目购物车()会自动把你想要的“商品”()带进来结论直接使用这个就行不需要关心它,它是自动带来的在 Spring Boot 项目中写测试,就引入。它会帮你处理好一切。

最近学习目标:MySQL,Redis 660

SOI技术实战:从晶圆结构到芯片性能提升的完整解析

本文深入解析SOI(Silicon on Insulator)技术如何通过独特的三明治晶圆结构提升芯片性能,涵盖从220nm SOI层设计到7nm节点的工艺挑战。详细探讨了埋氧层的绝缘优势、性能提升的物理机制,以及AMD处理器和5G射频中的实战应用,为半导体行业提供关键技术洞见。

wdx0123456的博客 960

别再只盯着DDR5了!聊聊3D DRAM:它凭什么能解决AI算力的内存墙难题?

本文深入探讨了3D DRAM技术如何突破AI算力的内存墙限制。通过立体堆叠架构,3D DRAM在存储密度、带宽和延迟方面实现显著提升,有效解决AI训练和推理中的内存瓶颈问题。文章还分析了三星、SK海力士等巨头的技术路线图,并指出商业化面临的挑战与机遇。

weixin_42685438的博客 188

Spring Boot Starter Test 完整使用指南

《Spring Boot Starter Test 企业级测试指南》摘要: 该指南是专为Java后端开发者设计的Spring Boot测试最佳实践手册。核心内容包括: 1️⃣ 组件说明:spring-boot-starter-test是Spring官方测试依赖聚合器,整合JUnit5、Mockito、AssertJ等主流工具,提供开箱即用的测试能力。 2️⃣ 核心价值:统一团队测试配置,避免依赖冲突;支持单元测试与集成测试;提升CI/CD稳定性。 3️⃣ 关键注解: @SpringBootTest:启动完整

python15397的博客 1321

云计算虚拟化实验(一)——虚拟机软件VMware的安装以及虚拟机系统的安装(Windows7+CentOS7)

主要内容: 1、虚拟机软件的安装(以VMware为例) 2、虚拟机系统的安装(Window7 + CentOS7) 3、虚拟主机网络互访 4、不同局域网内的虚拟主机互访(软路由——海蜘蛛) 0 ——首先介绍一下什么是虚拟化? 虚拟化,是指通过虚拟化技术将一台计算机虚拟为多台逻辑计算机。在一台计算机上同时运行多个逻辑计算机,每个逻辑计算机可运行不同的操作系统,并且应用程序都可以在

gg_asd的博客 1万+

mybatis-spring-boot-test详解

官网地址:http://mybatis.org/spring-boot-starter/mybatis-spring-boot-test-autoconfigure/#

mail_liuxing的专栏 2667

精度与速度双突破:YOLOv8-Pose 在 RK3588 上实现高性能人体姿态分析部署

本教程从YOLOv8-pose模型的姿态识别训练,到RK3588的边缘量化部署,为你打造了一套“高精度+高实时性+低成本”的人体姿态分析解决方案。无论是健身动作纠正、智能安防行为检测,还是工业人员姿态监控,这套技术都能直接复用——你只需替换数据集与业务逻辑,即可快速落地专属的边缘AI姿态识别系统。如果你在实践中遇到任何卡点,欢迎随时交流。记住,人体姿态识别的价值在于“关键点准、推理快、部署易”,而这三者的平衡,正是你通过本教程能掌握的核心能力。

know_F0727的博客 434

Win11 1 月更新黑屏循环故障技术分析与解决方案

2026年1月30日Windows 11更新引发黑屏循环故障,主要影响2018年前出厂、采用MBR分区及特定BIOS固件的设备,尤其对使用经典版Outlook(POP协议)的用户影响显著。故障表现为系统无限重启黑屏,导致数据访问中断。分析表明,问题源于硬件兼容性、分区格式与系统更新的交互冲突。解决方案包括进入安全模式回滚更新、暂停自动更新、升级驱动/BIOS,以及等待微软官方补丁。建议用户更新前评估硬件兼容性并备份数据,企业环境应建立分阶段更新测试机制。该事件为系统更新风险管理提供了重要参考。

博客 1441

Spring Boot Test深度解析

Testcontainers简化了集成测试环境搭建,通过Docker容器提供真实、隔离的测试环境。它支持多种服务(如MySQL、Redis等),能与JUnit等测试框架无缝集成。相比内存数据库或共享测试服务器,Testcontainers确保了环境一致性,提高了测试可信度。最佳实践包括容器复用、指定镜像版本和预拉取镜像等,适合需要真实集成测试的场景。

leohu0723的博客 170

uniapp [全端兼容] - 详细实现下拉筛选菜单功能组件,下拉式筛选菜单效果,类似电商美团点击筛选项底部弹出列表点击选择后自动收起(详细示例代码,全端兼容小程序、安卓苹果app、h5网页、nvue

uni-app,vue2,vue3,向下弹出菜单包含筛选功能,日期筛选,下拉框选择器,下拉多条件筛选,下拉式筛选菜单,uniApp如何实现条件下拉筛选,Uniapp官方条件筛选组件,下拉框式条件筛选插件组件,最好用的插件组件,多端兼容,下拉菜单筛选,过滤筛选列表,下拉筛选栏,多列联动的条件筛选,下拉菜单地区和筛选,微信小程序,支付宝小程序,h5网页,移动端网站,安卓app,苹果app,nvue,uniapp所有平台兼容,下拉菜单筛选,下拉式条件筛选,下拉列表,点击排序,级联筛选,uniapp实现下拉筛选

🏆 前端领域优质创作者 1万+

SpringBoot 常见问题 spring-boot-starter、spring-boot-starter-test、spring-boot-starter-web含义与作用

Spring Boot Starter是简化项目依赖管理的核心组件,通过模块化设计提供开箱即用的功能。主要作用包括:1)通过单一依赖替代多个分散依赖;2)自动管理版本兼容性;3)触发相关自动配置。常用Starter有:spring-boot-starter-web(整合Spring MVC+Tomcat)、spring-boot-starter-test(集成JUnit/Mockito等测试工具)、spring-boot-starter(基础核心功能)。各Starter形成层级依赖关系,如web start

best_virtuoso的博客 1083

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

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

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

学透Spring Boot — 011. 一篇文章学会Spring Test

前面了解了Spring Test的基本概念,这篇文章我们深入学习SpringTest,已经项目中一般是怎么使用的

postnull的博客 2857

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

推荐项目:Spring Boot Test - 精准测试,高效开发

推荐项目:Spring Boot Test - 精准测试,高效开发 项目简介 是一个专注于Spring Boot应用测试的开源项目,它提供了丰富的测试工具和示例代码,旨在帮助开发者更便捷、准确地进行集成测试和端到端测试。该项目致力于简化Spring Boot应用程序的测试过程,提升开发效率,确保代码质量。 技术分析 1. Spring Boot集成 该项目基于Spring Boot框架,充分利用了...

gitblog_00027的博客 298

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

spring boot junit test

gradle 依赖: implementation 'org.junit.jupiter:junit-jupiter' testCompile group: 'org.junit.platform', name: 'junit-platform-launcher', version:'1.2.0' testCompile group: 'org.junit.jupiter', name: 'junit-jupiter-engine', version:'5.2.0' testCompile group:

MoseSky的博客 245

学透Spring Boot — 010. 单元测试和Spring Test

什么是UT 什么是TDD 什么是Mock框架 为什么要用Spring Test,一篇文章掌握这么概念

postnull的博客 1256

使用spring-boot-test做测试

一,控制层测试 package demo.springdatajap.controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframewor...

灰的博客 2905
上一篇: Spring boot servlet,filter,Listener,Interceptor
下一篇: Spring boot mybatis
xiaoduup
博客等级 码龄9年 23粉丝 83原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值