@RestController
public class HelloController {
@RequestMapping("/hello")
public String hello() {
return "Hello";
}
}
标注在类上:指定类内方法的统一路径前缀
标注在方法上:该方法的请求路径
参数:value 指定路径(数组),method 请求方式,如 RequestMethod.GET
配合@PathVaraible注解一起使用,用来处理动态的 URI
@RequestMapping(value = "/fetch/{id}", method = RequestMethod.GET)
String getDynamicUriValue(@PathVariable String id) {
System.out.println("ID is " + id);
return "Dynamic URI";
}
// 正则表达式匹配请求路径
// 可匹配:/fetch/category/shirt
// 不可匹配:/fetch/10/shirt
@RequestMapping(value = "/fetch/{id:[a-z]+}/{name}")
String getDynamicUriValueRegex(@PathVariable("name") String name) {
System.out.println("Name is " + name);
return "Dynamic URI parameter fetched using regex";
}
注解变体
@RunWith(SpringRunner.class)
@SpringBootTest
public class HelloControllerTest {
private MockMvc mvc;
@Before
public void setUp(){
// 注意:这里参数 new 的是要测试的Controller对象
mvc = MockMvcBuilders.standaloneSetup(new HelloController()).build();
}
@Test
public void hello() throws Exception {
mvc.perform(MockMvcRequestBuilders.get("/hello").accept(MediaType.APPLICATION_JSON))
.andExpect(MockMvcResultMatchers.status().isOk())
.andDo(MockMvcResultHandlers.print())
.andReturn();
}
}
@RunWith 一个运行器,@RunWith(SpringRunner.class),测试时启动Spring运行的上下文,SpringRunner是SpringJUnit4ClassRunner的一个别名。
配置文件属性的读取、加载,启动web服务器并定义和监听端口等 springboot测试服务环境。
@ContextConfiguration
手动指定配置文件的位置,常见于SSM框架项目的测试。
在每个测试方法之前都要运行的方法。
MockMvc是服务端 Spring MVC测试支持的主入口点。可以用来模拟客户端请求,用于测试。
构造MockMvc对象
独立安装Web模拟测试环境,xxx 待测试控制器类对象
MockMvcBuilders.standaloneSetup(xxx).build();
perform
执行一个请求
MockMvcRequestBuilders.get(“xxx”)
构造一个请求,返回类型:MockHttpServletRequestBuilder
MockHttpServletRequestBuilder
请求对象类
方法:
accept(MediaType… mediaTypes) : 指定请求的Accept(获取)头信息
content(byte[] content):指定请求Body体内容
… …
mockMvc.perform(get("/user/{id}", 1)) // 得到执行请求
// 验证存储模型数据
.andExpect(MockMvcResultMatchers.model().attributeExists("user"))
// 验证viewName
.andExpect(MockMvcResultMatchers.view().name("user/view"))
// 验证视图渲染时forward到的jsp
.andExpect(MockMvcResultMatchers.forwardedUrl("/WEB-INF/xxx.jsp"))
// 验证状态码
.andExpect(MockMvcResultMatchers.status().isOk())
// 输出MvcResult到控制台 注意是:MockMvcResultHandlers
.andDo(MockMvcResultHandlers.print());
MvcResult result = mockMvc.perform(get("/user/{id}", 1))//执行请求
.andReturn(); //返回MvcResult
Assert.assertNotNull(result.getModelAndView().getModel().get("user")); //自定义断言
mvc.perform(MockMvcRequestBuilders.post("/hello")
.param("name", "荆轲")
.param("author", "aa", "bb")
.accept(MediaType.APPLICATION_JSON))
.andExpect(MockMvcResultMatchers.status().isOk());
[1] @RequestMapping详解
[2] MockMVC - 基于RESTful风格的SpringMVC的测试
[3] spring-boot-examples