• java:springboot单元测试spring-boot-starter-test


    背景

    Java的单元测试可以使用多个框架,其中比较流行的包括:

    • JUnit:JUnit是Java单元测试最常用的框架,它提供了一套丰富的API,可以方便地编写测试用例和测试套件。JUnit 5是JUnit的最新版本,引入了许多新功能和改进。
    • Mockito:Mockito是一个模拟框架,可以模拟对象的行为和状态,以便在单元测试中检查方法的调用和参数。它提供了一组强大的API,可以方便地创建模拟对象和验证方法调用。
    • Spring Test:如果你正在使用Spring框架开发应用程序,那么可以使用Spring Test框架进行单元测试。Spring Test提供了一套完整的测试解决方案,可以方便地测试Spring应用程序的各种方面。

    Spring Boot Test的主要特点包括:

    • 快速创建测试环境:通过使用Spring Boot的自动化配置功能,可以快速创建测试环境,无需手动配置。
    • 提供丰富的测试功能:Spring Boot Test提供了丰富的测试功能,包括注解支持、MockMvc、RestTemplate等,可以方便地进行单元测试和集成测试。
    • 集成JUnit和Mockito:Spring Boot Test集成了JUnit和Mockito等测试框架和模拟框架,可以方便地编写测试用例和模拟对象。
    • 简化测试配置:通过使用Spring Boot的自动化配置功能,可以简化测试配置,只需关注测试用例的编写。

    Spring Boot Test 包含了这些库

    • JUnit 5:包含兼容JUnit4,Java 应用程序单元测试的事实标准
    • Spring Test 和 SpringBootTest:对Spring Boot应用程序的公共和集成测试支持
    • AssertJ:流式断言库
    • Hamcrest:匹配对象库
    • Mockito:Java 模拟框架
    • JSONassert:JSON 断言库
    • JsonPath: JSON XPath

    MockMvc概念

    MockMvc是Spring Test模块的一部分,它允许我们对Spring MVC控制器进行单元测试,而无需启动完整的Spring应用上下文。

    MockMvc可以模拟HTTP请求和响应,MockMvc就像是一个虚拟的Spring MVC,能够让我们快速测试控制器。

    MockMVC的基本步骤

    (1) mockMvc.perform执行一个请求。

    (2) MockMvcRequestBuilders.get(“XXX”)构造一个请求。

    (3) ResultActions.param添加请求传值

    (4) ResultActions.accept()设置返回类型

    (5) ResultActions.andExpect添加执行完成后的断言。

    (6) ResultActions.andDo添加一个结果处理器,表示要对结果做点什么事情,比如处使用print()输出整个响应结果信息。

    (7) ResultActions.andReturn表示执行完成后返回相应的结果。

    实例化

    方法一:通过参数指定一组控制器,这样就不需要从上下文获取

    mockMvC = MockMvcBuilders.standaloneSetup(new HelloWorldController()).build();
    
    • 1

    方法二:指定WebApplicationContext 将会从该上下文获得相应的控制器并得到相应的MockMvc

    mockMVC=MockMvcBuilders.webAppContextSetup(webApplicationContext).build();
    
    • 1

    步骤

    <dependency>
    	<groupId>org.springframework.bootgroupId>
    	<artifactId>spring-boot-starter-testartifactId>
    	<scope>testscope>
    dependency>
    
    • 1
    • 2
    • 3
    • 4
    • 5

    1、双击选中你要测试的类,点击 Navigate
    在这里插入图片描述
    2、注意点击 Test 的时候鼠标要放在对应的类上
    在这里插入图片描述
    3、勾选你想要的
    在这里插入图片描述
    这时候生成的代码是这样的

    package com.zhangyu.controller;
    
    import org.junit.jupiter.api.AfterEach;
    import org.junit.jupiter.api.BeforeEach;
    import org.junit.jupiter.api.Test;
    
    import static org.junit.jupiter.api.Assertions.*;
    
    class HelloWorldControllerTest {
    
        @BeforeEach
        void setUp() {
        }
    
        @AfterEach
        void tearDown() {
        }
    
        @Test
        void index() {
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22

    根据上面的 MockMVC的基本步骤 我们编写代码

    package com.zhangyu.controller;
    
    import org.junit.jupiter.api.BeforeEach;
    import org.junit.jupiter.api.Test;
    import org.springframework.boot.test.context.SpringBootTest;
    import org.springframework.http.MediaType;
    import org.springframework.test.web.servlet.MockMvc;
    import org.springframework.test.web.servlet.request.MockMvcRequestBuilders;
    import org.springframework.test.web.servlet.result.MockMvcResultHandlers;
    import org.springframework.test.web.servlet.result.MockMvcResultMatchers;
    import org.springframework.test.web.servlet.setup.MockMvcBuilders;
    
    import static org.junit.jupiter.api.Assertions.*;
    @SpringBootTest
    class HelloWorldControllerTest {
    
        private MockMvc mvc;
    
        @BeforeEach
        void setUp() throws Exception {
            mvc = MockMvcBuilders.standaloneSetup(new HelloWorldController()).build();
        }
    
        @Test
        void index() throws Exception {
            mvc.perform(MockMvcRequestBuilders.get("/hello").accept(MediaType.APPLICATION_JSON))
                    .andExpect(MockMvcResultMatchers.status().isOk())
                    .andDo(MockMvcResultHandlers.print())
                    .andReturn();
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31

    稍微解释一下这个几个新的注解:

    • @SpringBootTest:获取启动类,加载配置,寻找主配置启动类(被 @SpringBootApplication 注解的)
    • @RunWith(SpringRunner.class):让JUnit运行Spring的测试环境,获得Spring环境的上下文的支持。
  • 相关阅读:
    @ConditionalOnProperty 注解的四个属性解释
    #案例:web自动化的一个案例!字节跳动!写到csv文件中!
    一、VXLAN基础
    matlab保存示波器数据
    Python——分支语句
    判断一棵树是否为完全二叉树——层序遍历
    【翻译】增长秘笈,如何让你的开源项目Star数快速增长
    Snipaste 提高十倍生产力工作效率,堪称最强神器
    [从零开始学习FPGA编程-57]:视野篇-异构系统、异构芯片、大小核、芯片互联网、UCIe标准
    Java操作符
  • 原文地址:https://blog.csdn.net/weixin_43972437/article/details/134466690