当前位置:   article > 正文

Springboot @Test 给Controller接口 写 单元测试_springboot test controller

springboot test controller

前言


最近有小伙伴问到怎么给 controller的接口写单元测试

 

单元测试是开发必不可少的一个环节。

既然有人问到了,那我觉得可能不止一个人不会,那就按照惯例,出手。

 

正文


内容:

主要是get 和 post 两种请求方式的接口 的 单元测试写法。

get方式请求   介绍 3种传参:


①@PathVariable
②@RequestParam("id")
③类传参 如 User user

post方式请求  介绍 1种传参:
@RequestBody

@RequestHeader请求头参数添加参数


上代码 :


先看GET方式请求,简单写三个示例接口

  1. @GetMapping("/getId/{id}")
  2. public String pathVariableTest(@PathVariable Integer id) {
  3. return "id: "+id;
  4. }
  5. @GetMapping("/getId")
  6. public String requestParamTest( @RequestParam("id") Integer id) {
  7. return "id: "+id;
  8. }
  9. @GetMapping("/getUser")
  10. public String requestParamObjectTest( User user) {
  11. return user.toString();
  12. }

然后我们来针对这三个get请求接口写单元测试

pom.xml 加入测试使用的jar依赖

<dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <scope>test</scope>
</dependency>

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-test</artifactId>
    <scope>test</scope>
</dependency>

创建一个单元测试类 MyControllerTest.java

 代码:

  1. import org.junit.runner.RunWith;
  2. import org.slf4j.Logger;
  3. import org.slf4j.LoggerFactory;
  4. import org.springframework.boot.test.context.SpringBootTest;
  5. import org.springframework.test.context.junit4.SpringRunner;
  6. import org.springframework.test.context.web.WebAppConfiguration;
  7. @RunWith(SpringRunner.class)
  8. @SpringBootTest
  9. @WebAppConfiguration
  10. public class MyControllerTest {
  11. protected Logger logger = LoggerFactory.getLogger(MyControllerTest.class);
  12. }

 写下来开始写 针对controller 的 单元测试代码:

 代码:

  1. @Autowired
  2. DoTestController doTestController;
  3. private MockMvc mockMvc;
  4. @Before
  5. public void setup() {
  6. mockMvc = MockMvcBuilders.standaloneSetup(doTestController).build();
  7. }

 

首先针对这种场景的GET请求,传入参数的,我们怎么写单测?

 @RequestParam("id")


 代码: 

  1. @Test
  2. public void getTest() throws Exception {
  3. MvcResult mvcResult = mockMvc.perform(
  4. MockMvcRequestBuilders.get("/getId")
  5. .param("id", "123")
  6. )
  7. .andExpect(MockMvcResultMatchers.status().isOk())
  8. .andDo(MockMvcResultHandlers.print())
  9. .andReturn();
  10. logger.info("调用返回的结果:{}", mvcResult.getResponse().getContentAsString());
  11. }

ps: 多个  @RequestParam  就同样 一直 .param即可

示例:

 当然也可以通过map传值,传多个:

 

 跑一下单测看看效果:

 

然后是@PathVariable 传参方式:

 单测写法:

 代码:

  1. @Test
  2. public void pathVariableTest() throws Exception {
  3. Integer id = 888;
  4. MvcResult mvcResult = mockMvc.perform(
  5. MockMvcRequestBuilders.get("/getId/" + id)
  6. )
  7. .andExpect(MockMvcResultMatchers.status().isOk())
  8. .andDo(MockMvcResultHandlers.print())
  9. .andReturn();
  10. logger.info("调用返回的结果:{}", mvcResult.getResponse().getContentAsString());
  11. }

 

然后是传类的情景:

  单测写法:

代码:
 

  1. @Test
  2. public void getTestObject() throws Exception {
  3. MvcResult mvcResult = mockMvc.perform(
  4. MockMvcRequestBuilders.get("/getUser")
  5. .param("userId", "123")
  6. .param("name", "JCccc")
  7. .param("age", "18")
  8. .param("userCode", "100244")
  9. .contentType(MediaType.APPLICATION_FORM_URLENCODED_VALUE)
  10. )
  11. .andExpect(MockMvcResultMatchers.status().isOk())
  12. .andDo(MockMvcResultHandlers.print())
  13. .andReturn();
  14. logger.info("调用返回的结果:{}", mvcResult.getResponse().getContentAsString());
  15. }

然后看下POST 请求方式的接口 单测写法

 

顺便把请求头参数方式一并写了:

 代码:
 

  1. @Test
  2. public void postTest() throws Exception {
  3. User user = new User();
  4. user.setUserId(100011L);
  5. user.setName("JCccc");
  6. user.setUserCode("100244");
  7. user.setAge(18);
  8. String strJson = JSON.toJSONString(user);
  9. MvcResult mvcResult = mockMvc.perform(
  10. MockMvcRequestBuilders.post("/getRequestBodyValue")
  11. .header("token", "收藏点赞")
  12. .accept(MediaType.parseMediaType("application/json;charset=UTF-8"))
  13. .contentType(MediaType.APPLICATION_JSON)
  14. .content(strJson)
  15. )
  16. .andExpect(MockMvcResultMatchers.status().isOk())
  17. .andDo(MockMvcResultHandlers.print())
  18. .andReturn();
  19. logger.info("调用返回的结果:{}", mvcResult.getResponse().getContentAsString());
  20. }

效果:

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/运维做开发/article/detail/983121
推荐阅读
相关标签
  

闽ICP备14008679号