Spring Boot Mock对Restful API测试 CRUD
2018-03-18 09:05
405 查看
package vip.fkandy; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.http.MediaType; import org.springframework.mock.web.MockMultipartFile; import org.springframework.test.context.junit4.SpringRunner; import org.springframework.test.web.servlet.MockMvc; import org.springframework.test.web.servlet.setup.MockMvcBuilders; import org.springframework.web.context.WebApplicationContext; import java.time.LocalDateTime; import java.time.ZoneId; import java.util.Date; import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.*; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.jsonPath; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; /** * Spring Boot测试用例 */ @RunWith(SpringRunner.class) @SpringBootTest public class UserControllerTest { //伪造MVC环境,不会真正启动tomcat,所以会很快 @Autowired private WebApplicationContext context; private MockMvc mockMvc; /** * 每一个测试用例执行之前执行 */ @Before public void setUp() { mockMvc = MockMvcBuilders.webAppContextSetup(context).build(); } /** * 查询列表成功测试用例 * * @throws Exception */ @Test public void whenQuerySuccess() throws Exception { String result = mockMvc.perform( get("/user") .param("username", "jojo") .param("age", "18") .param("ageTo", "60") .param("size", "15") .param("page", "3") .param("sort", "age,desc") .contentType(MediaType.APPLICATION_JSON_UTF8)) .andExpect(status().isOk()) .andExpect(jsonPath("$.length()") .value(3)) .andReturn().getResponse().getContentAsString(); System.out.println("Result:" + result); } /** * 获取用户详细信息测试用例 * * @throws Exception */ @Test public void whenGetInfoSuccess() throws Exception { String result = mockMvc.perform( get("/user/1") .contentType(MediaType.APPLICATION_JSON_UTF8)) .andExpect(status().isOk()) .andExpect(jsonPath("$.username") .value("zhangsan")) .andReturn().getResponse().getContentAsString(); System.out.println(result); } /** * 获取用户信息失败测试用例 * * @throws Exception */ @Test public void whenGetInfoFail() throws Exception { mockMvc.perform(get("/user/a") .contentType(MediaType.APPLICATION_JSON_UTF8)) .andExpect(status().is4xxClientError()); } /** * 创建用户成功测试用例 * * @throws Exception */ @Test public void whenCreateSuccess() throws Exception { Date date = new Date(); String content = "{\"username\":\"tom\",\"password\":\"123456\",\"birthday\":" + date.getTime() + "}"; String reuslt = mockMvc.perform(post("/user").contentType(MediaType.APPLICATION_JSON_UTF8) .content(content)) .andExpect(status().isOk()) .andExpect(jsonPath("$.id").value("1")) .andReturn().getResponse().getContentAsString(); System.out.println(reuslt); } /** * 创建失败测试用例 * * @throws Exception */ @Test public void whenCreateFail() throws Exception { Date date = new Date(); System.out.println(date.getTime()); String content = "{\"username\":\"tom\",\"password\":null,\"birthday\":" + date.getTime() + "}"; String reuslt = mockMvc.perform(post("/user").contentType(MediaType.APPLICATION_JSON_UTF8) .content(content)) .andExpect(status().isOk()) .andExpect(jsonPath("$.id").value("1")) 4000 .andReturn().getResponse().getContentAsString(); System.out.println("---" + reuslt); } /** * 修改用户信息成功测试用例 * * @throws Exception */ @Test public void whenUpdateSuccess() throws Exception { Date date = new Date(LocalDateTime.now().plusYears(1).atZone(ZoneId.systemDefault()).toInstant().toEpochMilli()); System.out.println(date.getTime()); String content = "{\"id\":\"1\", \"username\":\"tom\",\"password\":null,\"birthday\":" + date.getTime() + "}"; String reuslt = mockMvc.perform(put("/user/1").contentType(MediaType.APPLICATION_JSON_UTF8) .content(content)) .andExpect(status().isOk()) .andExpect(jsonPath("$.id").value("1")) .andReturn().getResponse().getContentAsString(); System.out.println(reuslt); } /** * 删除用户成功测试用例 * * @throws Exception */ @Test public void whenDeleteSuccess() throws Exception { mockMvc.perform(delete("/user/1") .contentType(MediaType.APPLICATION_JSON_UTF8)) .andExpect(status().isOk()); //因为是restful api 所以只需要查看状态码就行了 } /** * 上传成功测试用例 * * @throws Exception */ @Test public void whenUploadSuccess() throws Exception { String result = mockMvc.perform(fileUpload("/file") .file(new MockMultipartFile("file", "test.txt", "multipart/form-data", "hello upload".getBytes("UTF-8")))) .andExpect(status().isOk()) .andReturn().getResponse().getContentAsString(); System.out.println(result); } }
相关文章推荐
- SpringBoot非官方教程 | 第十一篇:springboot集成swagger2,构建优雅的Restful API
- spring 或springboot对controller层方法进行测试
- [SpringBoot系列]--Spring Hibernate search 注解实现(未测试)
- SpringBoot系列(4)---SpringMVC测试用例
- Spring Boot REST API 自动化测试
- springboot集成swagger2,构建优雅的Restful API
- spring.jar是包含有完整发布的单个jar 包,spring.jar中包含除了spring-mock.jar里所包含的内容外其它所有jar包的内容,因为只有在开发环境下才会用到 spring-mock.jar来进行辅助测试,正式应用系统中是用不得这些类的
- SpringBoot详细研究-04部署测试与监控
- Spring Boot之分离测试和生产环境的应用配置
- 由保存当前用户引发的springboot的测试方式postman/restlet还是swagger2
- RESTful API开发神器swagger与spring-boot的快速整合使用
- (十三)SpringBoot之Spring-Data-Jpa(二)CRUD实现以及添加自定义方法
- Spring Boot应用的测试——Mockito
- SpringBoot-断言测试
- 基于Springboot+Junit+Mockito做单元测试的示例
- Spring Boot中使用Swagger2构建强大的RESTful API文档
- SpringBoot-使用Mybatis实现完整的CRUD和分页
- 《Springboot极简教程》使用Spring Boot, JPA, Mysql, ThymeLeaf,gradle, Kotlin快速构建一个CRUD Web App
- Spring-Boot -- RESTFUL风格的API接口的三种调用方式【测试】
- springboot测试的时候status(),content()方法报错