• SpringBoot测试类


    一、SpringBoot Test介绍

    Spring Test与JUnit等其他测试框架结合起来,提供了便捷高效的测试手段。而Spring Boot Test 是在Spring Test之上的再次封装,增加了切片测试,增强了mock能力。

    整体上,Spring Boot Test支持的测试种类,大致可以分为如下三类:

    • 单元测试:一般面向方法,编写一般业务代码时。涉及到的注解有@Test。
    • 切片测试:一般面向难于测试的边界功能,介于单元测试和功能测试之间。涉及到的注解有@RunWith @WebMvcTest等。
    • 功能测试:一般面向某个完整的业务功能,同时也可以使用切面测试中的mock能力,推荐使用。涉及到的注解有@RunWith @SpringBootTest等。

    功能测试过程中的几个关键要素及支撑方式如下:

    • 测试运行环境:通过@RunWith 和 @SpringBootTest启动spring容器。
    • mock能力:Mockito提供了强大mock功能。
    • 断言能力:AssertJ、Hamcrest、JsonPath提供了强大的断言能力。

    二、测试示例

    2.1、单元测试

    import org.junit.Test;
     
    public class JavaTest {
        @Test
        public void test() {
            System.out.println(123);
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    2.2、切片测试

    所谓切片测试,官网文档称为 “slice” of your application,实际上是对一些特定组件的称呼。这里的slice并非单独的类(毕竟普通类只需要基于JUnit的单元测试即可),而是介于单元测试和集成测试中间的范围。

    比如MVC中的Controller、JDBC数据库访问、Redis客户端等,这些模块大多脱离特定环境后不能独立运行,假如spring没有为此提供测试支持,开发者只能启动完整服务对这些模块进行测试,这在一些复杂的系统中非常不方便,所以spring为这些模块提供了测试支持,使开发者有能力单独对这些模块进行测试。

    @RunWith(SpringRunner.class)
    @WebMvcTest(IndexController.class)
    public class SpringBootTest {
        @Autowired
        private MockMvc mvc;
        
        @Test
        public void testExample() throws Exception {
            //groupManager访问路径
            //param传入参数
            MvcResult result=mvc.perform(MockMvcRequestBuilders.post("/groupManager").param("pageNum","1").param("pageSize","10")).andReturn();
            MockHttpServletResponse response = result.getResponse();
            String content = response.getContentAsString();
            List jtInfoDtoList = GsonUtils.toObjects(content, new TypeToken>() {}.getType());
            for(JtInfoDto infoDto : jtInfoDtoList){
                System.out.println(infoDto.getJtCode());
            }
    
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20

    使用@WebMvcTest和MockMvc搭配使用,可以在不启动web容器的情况下,对Controller进行测试(注意:仅仅只是对controller进行简单的测试,如果Controller中依赖用@Autowired注入的service、dao等则不能这样测试)。

    2.3、功能测试

    POM引入:

    
        org.springframework.boot
        spring-boot-test
    
    
        org.springframework
        spring-test
        ${spring.version}
        compile
    
    
        junit
        junit
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    一旦依赖了spring-boot-starter-test,下面这些类库将被一同依赖进去:

    • JUnit:java测试事实上的标准,默认依赖版本是4.12(JUnit5和JUnit4差别比较大,集成方式有不同)。
    • Spring Test & Spring Boot Test:Spring的测试支持。
    • AssertJ:提供了流式的断言方式。
    • Hamcrest:提供了丰富的matcher。
    • Mockito:mock框架,可以按类型创建mock对象,可以根据方法参数指定特定的响应,也支持对于mock调用过程的断言。
    • JSONassert:为JSON提供了断言功能。
    • JsonPath:为JSON提供了XPATH功能

    SpringBoot测试类:

    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.cloud.client.discovery.DiscoveryClient;
    import org.springframework.test.context.junit4.SpringRunner;
    
    
    import java.util.List;
    
    @RunWith(SpringRunner.class)
    @SpringBootTest
    public class SpringbootTest {
        @Autowired
        private DiscoveryClient discoveryClient;
    
        @Test
        public void NacosTest() {
    
            List services = discoveryClient.getServices();
            services.forEach(x-> System.out.println(x));
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23

    **FAQ:**Specify @BootstrapWith’s ‘value’ attribute or make the default bootstrapper class available.

    **异常原因:**test的包是idea自动导入的,版本不一致。

    **解决方案:**更改test的版本和项目的spring的一致。

    三、详细API

    Test Auto-configuration Annotations

    SpringBoot Test 人类使用指南 - 知乎

    学习 Spring Boot:(二十九)Spring Boot Junit 单元测试_追光者的博客-CSDN博客

    Spring Boot Test

    先自我介绍一下,小编13年上师交大毕业,曾经在小公司待过,去过华为OPPO等大厂,18年进入阿里,直到现在。深知大多数初中级java工程师,想要升技能,往往是需要自己摸索成长或是报班学习,但对于培训机构动则近万元的学费,着实压力不小。自己不成体系的自学效率很低又漫长,而且容易碰到天花板技术停止不前。因此我收集了一份《java开发全套学习资料》送给大家,初衷也很简单,就是希望帮助到想自学又不知道该从何学起的朋友,同时减轻大家的负担。添加下方名片,即可获取全套学习资料哦

  • 相关阅读:
    安装指定版本docker和docker-compose
    Hadoop生态圈中的Flume数据日志采集工具
    线性模型(穷举法实现)
    字符串统计(哈希做法)
    牛客SQL必会知识
    python+pytest接口自动化(10)-session会话保持
    K8S容器内安装cur/telnet命令(Alpine Linux离线环境安装curl/telnet或其他工具)
    java计算机毕业设计基于ssm的高校普法系统(源代码+数据库+Lw文档)
    软考 - 程序语言设计
    Greetings(状压DP,枚举子集转移)
  • 原文地址:https://blog.csdn.net/m0_67403076/article/details/126115129