前言:
关于SpringBoot的单元测试,描述一下三种单元测试的方式。
1、约定
单元测试代码写在src/test/java目录下,单元测试类命名为*Test,前缀为要测试的类名。
2.、使用mock方式单元测试
Spring测试框架提供MockMvc对象,可以在不需要客户端-服务端请求的情况下进行MVC测试,完全在服务端这边就可以执行Controller的请求,跟启动了测试服务器一样。
测试开始之前需要建立测试环境,setup方法被@Before修饰。通过MockMvcBuilders工具,使用WebApplicationContext对象作为参数,创建一个MockMvc对象。
@RunWith(SpringRunner.class) @SpringBootTest(classes = Application.class)//这里的Application是springboot的启动类名 @WebAppConfiguration public class StyleControllerTest { @Autowired private WebApplicationContext context; private MockMvc mockMvc; private ObjectMapper mapper = new ObjectMapper(); @Before public void setupMockMvc() throws Exception { mockMvc = MockMvcBuilders.webAppContextSetup(context).build(); } @Test public void testSend() throws Exception { Long id =1l; //调用接口,传入添加的用户参数 mockMvc.perform(MockMvcRequestBuilders.get("/style/listStyleById") .contentType(MediaType.APPLICATION_JSON_UTF8) .content(mapper.writeValueAsString(id))) .andExpect(MockMvcResultMatchers.status().isOk()) .andExpect(MockMvcResultMatchers.content().contentType(MediaType.APPLICATION_JSON_UTF8)) .andDo(MockMvcResultHandlers.print()); } }
3、使用Feign方式单元测试
以下是Feign接口的单元测试示例,启动项目,可以测试本jar提供的服务,不启动服务,改为远程服务地址,可以测试远程jar提供的服务。其中
@EnableFeignClients(clients = UserControllerTest.UserServiceFeignClient.class)
类似我们实际应用调用相关服务一样。
@RunWith(SpringJUnit4ClassRunner.class) @SpringBootTest(classes = UserControllerTest.class) @Import({ FeignAutoConfiguration.class, HttpMessageConvertersAutoConfiguration.class }) @EnableFeignClients(clients = UserControllerTest.UserServiceFeignClient.class) public class UserControllerTest { @FeignClient(value = "loan-server", url = "http://localhost:9070/") public interface UserServiceFeignClient extends UserServiceClient { } @Autowired private UserServiceFeignClient userServiceFeignClient; @Test public void getUser() { User user = userServiceFeignClient.getSDKUserById(1); System.out.println(user); } }
4、使用Http Rest API 单元测试
使用RestTemplate发起GET或POST请求,其中@SpringBootTest这两行注释掉就不启动SpringBoot容器直接进行远程调用测试。
@RunWith(SpringJUnit4ClassRunner.class) public class LoanControllerTest { private final static String url = "http://localhost:9070/"; private static RestTemplate restTemplate = new RestTemplate(); @Test public void test(){ ResponseEntity<String> response = restTemplate.exchange(url + "/loan/getLoanById?id=1" , HttpMethod.GET, new HttpEntity(null), String.class); System.out.println("result: " + response.getBody()); } }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix