@AutoConfigureMockMvc测试发送虚拟请求
package com.atheima; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.test.web.servlet.MockMvc; import org.springframework.test.web.servlet.RequestBuilder; import org.springframework.test.web.servlet.ResultActions; import org.springframework.test.web.servlet.ResultMatcher; import org.springframework.test.web.servlet.request.MockMvcRequestBuilders; import org.springframework.test.web.servlet.result.MockMvcResultMatchers; import org.springframework.test.web.servlet.result.StatusResultMatchers; @SpringBootTest(args = {"--test.prop=123"},webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT) @AutoConfigureMockMvc class Springboot13ConfigurationApplicationTests { @Value("${test.prop}") private String msg; @Test void contextLoads() { System.out.println(msg); } @Test void testWeb(@Autowired MockMvc mockMvc){ RequestBuilder requestBuilder = MockMvcRequestBuilders.get("/books"); try { ResultActions perform = mockMvc.perform(requestBuilder); StatusResultMatchers status = MockMvcResultMatchers.status(); ResultMatcher ok = status.isOk(); perform.andExpect(ok); } catch (Exception e) { e.printStackTrace(); } } }
- @AutoConfigureMockMvc注解则是一个测试自动配置注解,它会自动配置MockMvc实例。MockMvc是一个强大的工具,允许你以编程方式模拟 HTTP 请求并验证响应,而无需启动实际的 Servlet 容器。
- @SpringBootTest注解用于加载整个 Spring 应用程序上下文,包括你的应用程序配置和所有 Bean。
- 使用@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.DEFINED_PORT)时,并不要求你必须和@AutoConfigureMockMvc一起启用。这两个注解服务于不同的目的,并且它们的使用是独立的。
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.DEFINED_PORT)告诉Spring Boot启动一个完整的Servlet容器,并监听一个预定义的端口(通常是由server.port属性指定的)。这意味着你的测试将能够通过网络层与运行中的Spring Boot应用程序进行交互,就像它是一个真正的Web应用程序一样。
然而,这种测试方式通常更重,因为它需要启动整个Servlet容器,并且可能需要处理网络延迟和并发问题。此外,由于它监听一个端口,因此不能在同一端口上同时运行多个这样的测试实例。
另一方面,@AutoConfigureMockMvc用于自动配置MockMvc,这是一个用于测试Spring MVC控制器的强大工具。它允许你以编程方式模拟HTTP请求并验证响应,而无需启动实际的Servlet容器或监听网络端口。
如果你需要测试整个应用程序的集成(包括网络层),并且不介意测试运行得更慢,那么你可以使用@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.DEFINED_PORT),但通常你不会与@AutoConfigureMockMvc一起使用它,因为MockMvc是用于模拟HTTP请求的,而不是与真实运行的Servlet容器进行交互。
- 请注意,即使你使用@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.DEFINED_PORT),你仍然可以通过其他方式(如使用RestTemplate、WebClient或HttpClient等)来发送HTTP请求到你的Spring Boot应用程序,并验证响应。但是,这些方法不如MockMvc那样轻量级或方便,因为它们涉及到网络层的交互。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?