SpringBoot测试——高级配置

简介: SpringBoot测试——高级配置


一、SpringBoot加载测试专用属性

加载测试范围的临时属性,应用于小范围测试环境


1.@SpringBootTest注解的properties参数


  • 在启动测试环境时,可以通过properties参数设置测试环境专用的属性
/**
 * @author .29.
 * @create 2023-04-01 20:28
 */
//properties属性,可以为当前测试用添加临时的属性配置
@SpringBootTest(properties = "test.prop=testValueByProperties")
public class PropertiesAndArgsTest {
    @Value("${test.prop}")
    private String msg;
    @Test
    public void testProperties(){
        System.out.println(msg);
    }
}


  • 对应的application.yml配置文件内容:
test:
  prop:


优势:比多环境开发中的测试环境影响范围小,仅在当前测试类有效。



2.@SpringBootTest注解的args参数


  • 在启动测试环境时,可以通过args参数设置测试环境专用的传入属性
/**
 * @author .29.
 * @create 2023-04-01 20:28
 */
//args属性,可以为当前测试用例添加临时的命令行参数
@SpringBootTest(args = {"--test.prop=testValueByArgs"})
public class PropertiesAndArgsTest {
    @Value("${test.prop}")
    private String msg;
    @Test
    public void testProperties(){
        System.out.println(msg);
    }
}


  • 对应的application.yml配置文件内容:
test:
  prop:



二、SpringBoot加载测试专用配置

加载测试范围配置,应用于小范围测试环境


  • 专用的配置:
/**
 * @author .29.
 * @create 2023-04-01 21:27
 */
//专用的配置
@Configuration
public class MsgConfig {
    @Bean
    public String msg(){
        return "test @Import get msg";
    }
}


  • 使用@Import注解,可以加载当前测试类专用的配置:
/**
 * @author .29.
 * @create 2023-04-01 21:30
 */
@SpringBootTest
@Import(MsgConfig.class)
public class ConfigurationTest {
    @Autowired
    private String msg;
    @Test
    public void testConfiguration(){
        System.out.println(msg);
    }
}

成功加载到专用配置中的内容:



三、SpringBoot 模拟测试Web环境

Web环境模拟测试

  1. 设置测试端口
  2. 模拟测试启动
  3. 模拟测试匹配(各组成部分消息均可匹配)


1.启动Web环境的不同方式


  • @SpringBootTest注解的webEnvironment属性 提供了启动Web环境的选择:


  • 默认 webEnvironment = SpringBootTest.WebEnvironment.NONE:不启动Web服务器


  • webEnvironment = SpringBootTest.WebEnvironment.DEFINED_PORT:使用默认端口在测试类启动Web服务器
/**
 * @author .29.
 * @create 2023-04-01 21:39
 */
//webEnvironment = SpringBootTest.WebEnvironment.DEFINED_PORT:默认端口在测试类启动Web服务器
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.DEFINED_PORT)
public class WebTest {
    @Test
    public void test(){
    }
}



  • webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT:使用随机端口在测试类启动Web服务器
/**
 * @author .29.
 * @create 2023-04-01 21:39
 */
//webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT: 随机端口 在测试类启动Web服务器
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
public class WebTest {
    @Test
    public void test(){
    }
}



2.发起虚拟请求


  • 控制层组件:
/**
 * @author .29.
 * @create 2023-04-01 22:38
 */
@RestController
@RequestMapping("/books")
public class BookController {
    @GetMapping
    public String get(){
        System.out.println("get() is running ...");
        return "Springboot";
    }
}


  • 发起MVC虚拟调用,模拟发起请求
/**
 * @author .29.
 * @create 2023-04-01 21:39
 */
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
//@AutoConfigureMockMvc注解:开启MVC虚拟调用
@AutoConfigureMockMvc
public class WebTest {
    @Test  //@Autowired注解,注入虚拟MVC调用对象
    public void testWeb(@Autowired MockMvc mockMvc) throws Exception {
        //创建虚拟请求,当前访问/books
        MockHttpServletRequestBuilder builder = MockMvcRequestBuilders.get("/books");
        //执行对应的请求
        mockMvc.perform(builder);
    }
}

成功发起虚拟请求



3.匹配响应的执行状态


  • 虚拟请求状态匹配:
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
//开启MVC虚拟调用
@AutoConfigureMockMvc
public class WebTest {
    @Test
    public void testStatus(@Autowired MockMvc mockMvc) throws Exception {
        //创建虚拟请求,当前访问/books (这里故意写错,模拟匹配失败)
        MockHttpServletRequestBuilder builder = MockMvcRequestBuilders.get("/books1");
        //执行对应的请求
        ResultActions actions = mockMvc.perform(builder);
        //设定预期值 与真实值进行比较,成功测试通过,失败测试失败
        //定义本次调用的预期值
        StatusResultMatchers status = MockMvcResultMatchers.status();
        //预计本次调用是成功的:状态200
        ResultMatcher ok = status.isOk();
        //添加预期值到本次调用过程中,与真实执行结果进行匹配
        actions.andExpect(ok);
    }
}

匹配失败时,输出匹配错误原因:



4.匹配响应体


/**
 * @author .29.
 * @create 2023-04-01 21:39
 */
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
//开启MVC虚拟调用
@AutoConfigureMockMvc
public class WebTest {
    @Test
    public void testBody(@Autowired MockMvc mockMvc) throws Exception {
        MockHttpServletRequestBuilder builder = MockMvcRequestBuilders.get("/books");
        ResultActions actions = mockMvc.perform(builder);
        //设定预期值 与真实值进行比较,成功测试通过,失败测试失败
        //定义本次调用的预期值
        ContentResultMatchers content = MockMvcResultMatchers.content();
        //预计请求体为控制层组件的返回值"Springboot 测试类启动web环境 发送虚拟请求"
        //如果请求体反馈JSON数据,string()改为json()
        ResultMatcher body = content.string("Springboot");
        //添加预期值到本次调用过程中,与真实执行结果进行匹配
        actions.andExpect(body);
    }
}



5.匹配响应头


@Test
    public void testHeader(@Autowired MockMvc mockMvc) throws Exception {
        MockHttpServletRequestBuilder builder = MockMvcRequestBuilders.get("/books");
        ResultActions actions = mockMvc.perform(builder);
        //设定预期值 与真实值进行比较,成功测试通过,失败测试失败
        //定义本次调用的预期值
        HeaderResultMatchers header = MockMvcResultMatchers.header();
        //预计请求头的Content-Type 为 text/plain;charset=UTF-8
        ResultMatcher string = header.string("Content-Type", "text/plain;charset=UTF-8");
        //添加预期值到本次调用过程中,与真实执行结果进行匹配
        actions.andExpect(string);
    }
}



目录
相关文章
|
1月前
|
Java 开发者 微服务
手写模拟Spring Boot自动配置功能
【11月更文挑战第19天】随着微服务架构的兴起,Spring Boot作为一种快速开发框架,因其简化了Spring应用的初始搭建和开发过程,受到了广大开发者的青睐。自动配置作为Spring Boot的核心特性之一,大大减少了手动配置的工作量,提高了开发效率。
61 0
|
5天前
|
Java Maven Spring
SpringBoot配置跨模块扫描问题解决方案
在分布式项目中,使用Maven进行多模块开发时,某些模块(如xxx-common)没有启动类。如何将这些模块中的类注册为Spring管理的Bean对象?本文通过案例分析,介绍了两种解决方案:常规方案是通过`@SpringBootApplication(scanBasePackages)`指定扫描路径;推荐方案是保持各模块包结构一致(如com.xxx),利用SpringBoot默认扫描规则自动识别其他模块中的组件,简化配置。
SpringBoot配置跨模块扫描问题解决方案
|
12天前
|
NoSQL Java Redis
Spring Boot 自动配置机制:从原理到自定义
Spring Boot 的自动配置机制通过 `spring.factories` 文件和 `@EnableAutoConfiguration` 注解,根据类路径中的依赖和条件注解自动配置所需的 Bean,大大简化了开发过程。本文深入探讨了自动配置的原理、条件化配置、自定义自动配置以及实际应用案例,帮助开发者更好地理解和利用这一强大特性。
56 14
|
1月前
|
缓存 IDE Java
SpringBoot入门(7)- 配置热部署devtools工具
SpringBoot入门(7)- 配置热部署devtools工具
52 1
SpringBoot入门(7)- 配置热部署devtools工具
|
23天前
|
安全 Java 测试技术
springboot之SpringBoot单元测试
本文介绍了Spring和Spring Boot项目的单元测试方法,包括使用`@RunWith(SpringJUnit4ClassRunner.class)`、`@WebAppConfiguration`等注解配置测试环境,利用`MockMvc`进行HTTP请求模拟测试,以及如何结合Spring Security进行安全相关的单元测试。Spring Boot中则推荐使用`@SpringBootTest`注解简化测试配置。
|
27天前
|
监控 负载均衡 容灾
slb测试配置
slb测试配置
32 5
|
1月前
|
缓存 IDE Java
SpringBoot入门(7)- 配置热部署devtools工具
SpringBoot入门(7)- 配置热部署devtools工具
49 2
 SpringBoot入门(7)- 配置热部署devtools工具
|
1月前
|
Java 测试技术 API
详解Swagger:Spring Boot中的API文档生成与测试工具
详解Swagger:Spring Boot中的API文档生成与测试工具
39 4
|
1月前
|
安全 应用服务中间件 网络安全
如何测试Nginx反向代理实现SSL加密访问的配置是否正确?
如何测试Nginx反向代理实现SSL加密访问的配置是否正确?
63 3
|
1月前
|
存储 前端开发 JavaScript
springboot中路径默认配置与重定向/转发所存在的域对象
Spring Boot 提供了简便的路径默认配置和强大的重定向/转发机制,通过合理使用这些功能,可以实现灵活的请求处理和数据传递。理解并掌握不同域对象的生命周期和使用场景,是构建高效、健壮 Web 应用的关键。通过上述详细介绍和示例,相信读者能够更好地应用这些知识,优化自己的 Spring Boot 应用。
37 3