版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_33248299/article/details/89324471
一.导学
- 编写第一个Restful Api
- 编写针对RestfulAPI的测试用例
- 使用注解声明RestfulAPI
- 在RestfulAPI中传递参数
- 常用注解
RestController 标明此Controller提供RestAPI
RequestMapping及变体。映射http请求url到java方法
RequestParam 映射请求参数到java方法的参数
PageableDefault 指定分页参数的默认值
- 先引入spring测试依赖
二.编写测试用例
1.编写类
@RunWith(SpringRunner.class)//由springRunner来运行这个测试类
@SpringBootTest//申明为SpringBoot测试类
public class UserControllerTest {
}
@RunWith(SpringRunner.class)
@SpringBootTest
public class UserControllerTest {
@Autowired
private WebApplicationContext wac;
// 伪造的mvc不会真正去启动项目
// 相对来说会比直接启用项目要快
private MockMvc mockMvc;
@Before//在所有测试用例执行之前执行
public void setup(){
mockMvc = MockMvcBuilders.webAppContextSetup(wac).build();
}
}
2.编写一个查询用户的测试用例
@Test
public void whenQuerySuccess() throws Exception{
mockMvc.perform(MockMvcRequestBuilders.get("/user") // 发起请求
.contentType(MediaType.APPLICATION_JSON_UTF8)) //添加请求头为json
.andExpect(MockMvcResultMatchers.status().isOk()) //期望返回码为200
.andExpect(MockMvcResultMatchers.jsonPath("$.length()").value(3));//期望返回集合长度为3
}
3.关于jsonPath
- 去github上面搜jsonPath
- https://github.com/json-path/JsonPath
- 下面有说明文档
4.编写一个RESTful API
@RestController
public class UserController {
@RequestMapping(value="/user",method = RequestMethod.GET)
public List<User> query(@RequestParam String username){//传过来参数必须要username
System.out.println(username);
List<User> list = new ArrayList<>();
list.add(new User());
list.add(new User());
list.add(new User());
return list;
}
}
public class User {
private String username;
private String password;
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
- 一般查询都是有条件的,根据username来查之类的
5.带参
@RestController
public class UserController {
@RequestMapping(value="/user",method = RequestMethod.GET)
public List<User> query(@RequestParam String username){//传过来参数必须要username
System.out.println(username);
List<User> list = new ArrayList<>();
list.add(new User());
list.add(new User());
list.add(new User());
return list;
}
}
- 如果不带这个参数就会出现这种情况
@Test
public void whenQuerySuccess() throws Exception{
mockMvc.perform(MockMvcRequestBuilders.get("/user")
.param("username","tang")
.contentType(MediaType.APPLICATION_JSON_UTF8))
.andExpect(MockMvcResultMatchers.status().isOk())
.andExpect(MockMvcResultMatchers.jsonPath("$.length()").value(3));
}
6.@RequestParam 注解说明
@RequestParam(required = true,name = "xxx",defaultValue=“tom”) String username
上面的注解作用是:username(名字可以任意,但是name属性必须和前端传递参数名一致) required是否必须要
当前端没传递名为xxx过来时,默认xxx的值为tom
7.多条件查询
- 查询条件过多 参数写一起不好看的 可以整合到一个对象中
public class UserQueryCondition {
private String username;
private int age;
private int ageTo;
private String xxx;
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public int getAgeTo() {
return ageTo;
}
public void setAgeTo(int ageTo) {
this.ageTo = ageTo;
}
public String getXxx() {
return xxx;
}
public void setXxx(String xxx) {
this.xxx = xxx;
}
}
@RequestMapping(value="/user",method = RequestMethod.GET)
public List<User> query(UserQueryCondition condition){
System.out.println(ReflectionToStringBuilder.toString(condition, ToStringStyle.MULTI_LINE_STYLE));
List<User> list = new ArrayList<>();
list.add(new User());
list.add(new User());
list.add(new User());
return list;
}
@Test
public void whenQuerySuccess() throws Exception{
mockMvc.perform(MockMvcRequestBuilders.get("/user")
.param("username","123")
.param("age","20")
.param("ageTo","70")
.param("xxx","xxx")
.contentType(MediaType.APPLICATION_JSON_UTF8))
.andExpect(MockMvcResultMatchers.status().isOk())
.andExpect(MockMvcResultMatchers.jsonPath("$.length()").value(3));
}
8.PageableDefault注解
@Test
public void whenQuerySuccess() throws Exception{
mockMvc.perform(MockMvcRequestBuilders.get("/user")
.param("username","123")
.param("age","20")
.param("ageTo","70")
.param("xxx","xxx")
.param("size","15")
.param("page","3")
.param("sort","age,desc")
.contentType(MediaType.APPLICATION_JSON_UTF8))
.andExpect(MockMvcResultMatchers.status().isOk())
.andExpect(MockMvcResultMatchers.jsonPath("$.length()").value(3));
}
@RequestMapping(value="/user",method = RequestMethod.GET)
public List<User> query(UserQueryCondition condition, @PageableDefault Pageable pageable){
System.out.println(ReflectionToStringBuilder.toString(condition, ToStringStyle.MULTI_LINE_STYLE));
System.out.println(pageable.getPageSize());//每页返回几条
System.out.println(pageable.getPageNumber());//查第几页数据
System.out.println(pageable.getSort());//排序方式
List<User> list = new ArrayList<>();
list.add(new User());
list.add(new User());
list.add(new User());
return list;
}
- 也是可以设置默认值的