首页 > 开发 > Java > 正文

SpringBoot Controller Post接口单元测试示例

2024-07-14 08:43:02
字体:
来源:转载
供稿:网友

概述

在日常的开发中,我们一般会定义一个service层,用于实现业务逻辑,并且针对service层会有与之对应的齐全的覆盖率高的单元测试。而对于controller层,一般不怎么做单元测试,因为主要的核心业务逻辑都在service层里,controller层只是做转发,调用service层接口而已。但是还是建议使用单元测试简单的将controller的方法跑一下,看看转发和数据转换的代码是否能正常工作。

Spring Boot里对controller层进行单元测试非常简单,只需要几个注解和一点点辅助代码即可搞定。

依赖的包

  <dependency>   <groupId>org.junit.jupiter</groupId>   <artifactId>junit-jupiter-api</artifactId>   <scope>test</scope>  </dependency>  <dependency>   <groupId>org.junit.jupiter</groupId>   <artifactId>junit-jupiter-engine</artifactId>   <scope>test</scope>  </dependency>  <dependency>   <groupId>org.springframework.boot</groupId>   <artifactId>spring-boot-starter-test</artifactId>   <scope>test</scope>  </dependency>  <dependency>   <groupId>com.alibaba</groupId>   <artifactId>fastjson</artifactId>  </dependency>

使用的Spring Boot 版本

2.0.4.RELEASE

代码

@ExtendWith(SpringExtension.class)@SpringBootTest(webEnvironment =SpringBootTest.WebEnvironment.MOCK,classes = TestApplication.class)@AutoConfigureMockMvcpublic class UserControllerTest { @Autowired private MockMvc mockMvc; @MockBean private UserService userService; @Test @DisplayName("测试controller方法") void test() throws Exception {  User param = new User();  param.setUserId(1111);  List<Address> addressList = new ArrayList<>();  Address address = new Address();  address.setName("我的地址");  addressList.add(address);  param.setAddressList(addressList);  MvcResult mvcResult = mockMvc.perform(    post("/xxx/test")      .contentType(MediaType.APPLICATION_JSON)      .content(JSON.toJSONString(param)))    .andReturn();    System.out.println(mvcResult.getResponse().getContentAsString()); }}
@RequestMapping(value = "/xxx", method = RequestMethod.POST)public Object test(@RequestBody(required = false)User user) throws Exception {}

如果你只是想简单的跑一下controller层,不想真正的去执行service方法的话,需要使用@MockBean将对应的servicemock掉。

 @MockBean private UserService userService;

使用Spring Boot Test的时候,它需要一个ApplicationContext,我们可以在@SpringBootTest注解中使用classes属性来指定。

@SpringBootTest(webEnvironment =SpringBootTest.WebEnvironment.MOCK,classes = TestApplication.class)

TestApplication的代码很简单。

@SpringBootApplicationpublic class TestApplication { public static void main(String[] args){  SpringApplicationBuilder builder = new SpringApplicationBuilder();  builder.environment(new StandardEnvironment());  builder.sources(TestApplication.class);  builder.main(TestApplication.class);  builder.run(args); }}

接下来我们只需要使用MockMvc发送post请求即可。如果controller层的post方法是带@RequestBody注解的,可以先将入参对象转换成JSON字符串。这里使用的是fastjson

JSON.toJSONString(param)

经过测试,如上代码能正常工作。

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对VeVb武林网的支持。


注:相关教程知识阅读请移步到JAVA教程频道。
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表