如何编写针对Restful API的测试用例
1、首先需要引入spring-boot-starter-test,会帮我们把测试框架引入进来。<dependency> &造婷用痃lt;groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope></dependency>
2、首先我们创建一稍僚敉视个测试类UserControllerTest,然后加上@RunWith(SpringRunner.class和@SpringBootTest的注解。接下来我们通过@Autowiredprivate WebApplicationContext wac来伪造web环境。
3、然后使用@Before注解来初始化mockMvc,@Before注解会在每个测试用例调用之前执行。@Beforepublic void setup() { mockMvc = MockMvcBuilders.webAppContextSetup(wac).build();}
4、接下来我们写一个查询请求的测试方法,在该方法上添加@Test注解,使用MockMvcRequestBuilders.g髫潋啜缅et()去模拟一个Get请求,MediaType.APPLICATION_JSON_UTF8指定媒体类型,MockMvcResultMatchers.status().isOk()表示结果,如下所示。@Testpublic void testQuery() throws Exception { // 模拟一个Get请求 mockMvc.perform(MockMvcRequestBuilders.get("/user") // 媒体类型 .contentType(MediaType.APPLICATION_JSON_UTF8)) // 对请求结果的期望 .andExpect(MockMvcResultMatchers.status().isOk()) // 期望返回的是一个集合,集合的长度是3 .andExpect(MockMvcResultMatchers .jsonPath("$.length()") .value(3));}
5、我们执行该单元测试,但是测试没有通过,原因是因为我们期望的返回码是200,但是实际返回的是404,是因为我们还没有编写一个/user的请求。
6、新增一个/user请求的类,返回值为null如下图所示,执行单元测试后虽然不报404的错误了,但是测试依旧不通过,因为期望的返回值不能是null,因此我们在编写代码的时候还要给一个确切的返回值,我们返回有三个对象的list,可以看到通过了单元测试。
7、如果想在单元测试中添加参数,使用.param()进行参数传递,相应的方法中使用@RequestParam注解传递参数。
8、如果想添加分页参数到单元测试中,我们在方法中使用Pageable去接收参数,使用@PageableDefault()注解给分页添加默认值。