SpringBoot Controller Post接口单元测试示例

 更新时间:2018年12月06日 14:24:15   作者:Sam哥哥  
今天小编就为大家分享一篇关于SpringBoot Controller Post接口单元测试示例,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧

概述

在日常的开发中,我们一般会定义一个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)
@AutoConfigureMockMvc
public 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的代码很简单。

@SpringBootApplication
public 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)

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

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对脚本之家的支持。如果你想了解更多相关内容请查看下面相关链接

相关文章

  • 详解SpringSecurity中的Authentication信息与登录流程

    详解SpringSecurity中的Authentication信息与登录流程

    这篇文章主要介绍了SpringSecurity中的Authentication信息与登录流程,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-09-09
  • SpringBoot Admin健康检查功能的实现

    SpringBoot Admin健康检查功能的实现

    admin主要就是告诉运维人员,服务出现异常,然后进行通知(微信、邮件、短信、钉钉等)可以非常快速通知到运维人员,相当报警功能,接下来通过本文给大家介绍SpringBoot Admin健康检查的相关知识,一起看看吧
    2021-06-06
  • 利用线程实现动态显示系统时间

    利用线程实现动态显示系统时间

    编写Applet小程序,通过在HTML文档中接收参数,显示当前的系统时间,需要的朋友可以参考下
    2015-10-10
  • java操作ElasticSearch聚合查询的示例代码

    java操作ElasticSearch聚合查询的示例代码

    这篇文章主要介绍了java操作ElasticSearch聚合查询的示例代码,本文通过实例代码给大家介绍的非常详细,感兴趣的朋友一起看看吧
    2024-08-08
  • Netty分布式客户端接入流程初始化源码分析

    Netty分布式客户端接入流程初始化源码分析

    这篇文章主要介绍了Netty分布式客户端接入流程初始化源码分析,有关channelConfig有关的初始化过程剖析,有需要的朋友可以借鉴参考下,希望能够有所帮助
    2022-03-03
  • java中抽象类和接口的相同和不同点介绍

    java中抽象类和接口的相同和不同点介绍

    大家好,本篇文章主要讲的是java中抽象类和接口的相同和不同点介绍,感兴趣的同学赶快来看一看吧,对你有帮助的话记得收藏一下,方便下次浏览
    2021-12-12
  • RocketMQ特性Broker存储事务消息实现

    RocketMQ特性Broker存储事务消息实现

    这篇文章主要为大家介绍了RocketMQ特性Broker存储事务消息实现详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-08-08
  • Java模板动态生成word文件的方法步骤

    Java模板动态生成word文件的方法步骤

    最近项目中需要根据模板生成word文档,模板文件也是word文档。本文使用使用freemarker模板生成word文件,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-07-07
  • Java全面讲解顺序表与链表的使用

    Java全面讲解顺序表与链表的使用

    大家好,今天给大家带来的是顺序表和链表,我觉得顺序表还是有比较难理解的地方的,于是我就把这一块的内容全部整理到了一起,希望能够给刚刚进行学习数据结构的人带来一些帮助,或者是已经学过这块的朋友们带来更深的理解,我们现在就开始吧
    2022-05-05
  • Java单表实现评论回复功能(多种实现方式)

    Java单表实现评论回复功能(多种实现方式)

    这篇文章主要介绍了Java单表实现评论回复功能,大家都知道评论功能有多种实现方式,本文逐一给大家详细讲解,需要的朋友可以参考下
    2023-03-03

最新评论