SpringBoot Controller Post接口单元测试示例
概述
在日常的开发中,我们一般会定义一个service层,用于实现业务逻辑,并且针对service层会有与之对应的齐全的覆盖率高的单元测试。而对于controller层,一般不怎么做单元测试,因为主要的核心业务逻辑都在service层里,controller层只是做转发,调用service层接口而已。但是还是建议使用单元测试简单的将controller的方法跑一下,看看转发和数据转换的代码是否能正常工作。
在SpringBoot里对controller层进行单元测试非常简单,只需要几个注解和一点点辅助代码即可搞定。
依赖的包
org.junit.jupiter junit-jupiter-api test org.junit.jupiter junit-jupiter-engine test org.springframework.boot spring-boot-starter-test test com.alibaba fastjson
使用的SpringBoot版本
2.0.4.RELEASE
代码
@ExtendWith(SpringExtension.class) @SpringBootTest(webEnvironment=SpringBootTest.WebEnvironment.MOCK,classes=TestApplication.class) @AutoConfigureMockMvc publicclassUserControllerTest{ @Autowired privateMockMvcmockMvc; @MockBean privateUserServiceuserService; @Test @DisplayName("测试controller方法") voidtest()throwsException{ Userparam=newUser(); param.setUserId(1111); ListaddressList=newArrayList<>(); Addressaddress=newAddress(); address.setName("我的地址"); addressList.add(address); param.setAddressList(addressList); MvcResultmvcResult=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) publicObjecttest(@RequestBody(required=false)Useruser)throwsException{ }
如果你只是想简单的跑一下controller层,不想真正的去执行service方法的话,需要使用@MockBean将对应的service类mock掉。
@MockBean privateUserServiceuserService;
使用SpringBootTest的时候,它需要一个ApplicationContext,我们可以在@SpringBootTest注解中使用classes属性来指定。
@SpringBootTest(webEnvironment=SpringBootTest.WebEnvironment.MOCK,classes=TestApplication.class)
TestApplication的代码很简单。
@SpringBootApplication publicclassTestApplication{ publicstaticvoidmain(String[]args){ SpringApplicationBuilderbuilder=newSpringApplicationBuilder(); builder.environment(newStandardEnvironment()); builder.sources(TestApplication.class); builder.main(TestApplication.class); builder.run(args); } }
接下来我们只需要使用MockMvc发送post请求即可。如果controller层的post方法是带@RequestBody注解的,可以先将入参对象转换成JSON字符串。这里使用的是fastjson。
JSON.toJSONString(param)
经过测试,如上代码能正常工作。
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对毛票票的支持。如果你想了解更多相关内容请查看下面相关链接