区块链网

区块链网

让建站和SEO变得简单

让不懂建站的用户快速建站,让会建站的提高建站效率!

技术解析 你的位置:区块链网 > 技术解析 > spring boot人人齐会编写接口,然则少有东谈主知谈接口集成测试若何

spring boot人人齐会编写接口,然则少有东谈主知谈接口集成测试若何

发布日期:2024-12-13 07:36    点击次数:55

布景

顺服入门spring boot的同学在各大培训视频能够教程中齐会教你若何编写接口。

比如咱们要写一个接口很浅易

java

代码解读

复制代码

@RestController @RequestMapping("") @Slf4j public class XiaoZouController { @GetMapping("/xiaozou") public String testByXiaoZouJiShu(TestDTO testDTO) { return testDTO; } }

加几个注解,一个接口就完成了。

如若要测试咱们一般等于通过postman能够apifox来测试。

使用这两种时势测试有个污点等于测试用例很难复用,其次无法在ci/cd中进行自动化测试。

部分api搞定器具撑握保存测试用例,然则永久是和代码永诀的,不利于重视

是以为了接口的测试,咱们需要编写集成测试。

缺憾的是许多建立很少了解在spring boot中若何编写集成测试,接下来咱们就来详备运筹帷幄下spring boot中的集成测试

集成测试

在spring boot中集成测试的时势有许多,咱们接下来逐一运筹帷幄,望望哪种时势最符合、最优雅

手动注入controller进行测试

spring boot提供了@SpringBootTest注解来进行集成测试。

一般东谈主测试controller齐会这么测试

java

代码解读

复制代码

@SpringBootTest @Profile("dev") class XiaoZouController { @Autowired private XiaoZouController xiaoZouController; @Test public void testController() { TestDTO testDTO = new TestDTO(); String xiaoZouJiShu = xiaoZouController.testByXiaoZouJiShu(testDTO); assertEquals("xiaoZouJiShu", xiaoZouJiShu); } }

使用这种时势进行测试有几个污点

无法模拟http肯求仅能测试controller的代码逻辑,骨子测试也等于server的逻辑像一些http中比如header、cookie等信息无法模拟,比如咱们有一些切面进行了肯求头的处理,比如咱们从header中取得了uid等信息,这种情况下咱们就无法进行测试

基于TestRestTemplate进行测试

如若咱们念念要模拟http肯求,咱们不错使用TestRestTemplate来进行测试

java

代码解读

复制代码

@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT) @Profile("dev") public class XiaoZouController { @LocalServerPort private int port; @Autowired private TestRestTemplate restTemplate; @Test void greetingShouldReturnDefaultMessage() throws Exception { assertThat(this.restTemplate.getForObject("http://localhost:" + port + "/xiaozou", String.class)).contains("xiaozou"); } }

@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)示意当场端口运转@LocalServerPort示意取适合场端口使用TestRestTemplate是来模拟http肯求的调用

这种时势测试也有污点

运转了一个土产货处事器,运转慢关于恶果校验莫得提供开箱即用的断言机制

基于MockMvc进行测试

如若咱们念念要土产货不运转处事器,仅仅测试处事器底下的档次,咱们不错使用MockMvc来进行测试

这与处理实在的http肯求处理时势不异,然则莫得处事器运转本钱

测试代码如下

java

代码解读

复制代码

@SpringBootTest @AutoConfigureMockMvc @Profile("dev") public class XiaoZouControllerTest { @Autowired private MockMvc mockMvc; @Test void greetingShouldReturnDefaultMessage() throws Exception { Long uid = 12345L; mockMvc.perform(MockMvcRequestBuilders.get("/xiaozou") .header("uid", uid) .contentType(MediaType.APPLICATION_JSON)) .andExpect(status().isOk()) .andExpect(jsonPath("$.code").value(200)) .andExpect(jsonPath("$.data.uid").value(uid)) .andExpect(jsonPath("$.data.version").doesNotExist()) .andExpect(jsonPath("$.data.deviceId").value(IsNull.nullValue())); } }

添加@AutoConfigureMockMvc注解自动注入MockMvc通过@Autowired注入MockMvc对象通过mockMvc进行http肯求模拟通过.hearder模拟header信息通过.contentType模拟content-type信息通过.andExpect进违警果校验通过jsonPath进行json恶果校验

转头

spring boot中测试controller有多种时势。

然则我合计最佳的时势依然通过@AutoConfigureMockMvc进行测试

无须运转处事器,测试速率快,况兼不错模拟http肯求,关于恶果校验也提供了许多的断言机制。

关于一些经常变化的业务接口写集成测试的兴致不是相配大。

是否需要编写集成测试依然要看接口的重猛进度、项策画时辰等多方面身分来决定。

小伙子,刀给你了,什么时刻用你我方决定啦



Powered by 区块链网 @2013-2022 RSS地图 HTML地图

Copyright Powered by站群 © 2013-2024