mockMvc
依赖:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
Controller层代码:
@GetMapping(value = "/girls")
public List<Girl> girlList(){
// logger.info("girlList");
return girlRepository.findAll();
}
Test层:
@RunWith(SpringRunner.class)
@SpringBootTest
@AutoConfigureMockMvc
@WebAppConfiguration
public class GirlControllerTest {
private MockMvc mvc;
@Autowired
private WebApplicationContext context;
@Before
public void setupMockMvc() throws Exception {
mvc = MockMvcBuilders.webAppContextSetup(context).build();
}
@Test
public void girlList() throws Exception {
mvc.perform(MockMvcRequestBuilders.get("/girls"))
.andExpect(MockMvcResultMatchers.status().isOk());
// .andExpect(MockMvcResultMatchers.content().string("abc"));
}
@Test
public void addGirl() throws Exception {
// Girl girl = new Girl();
// girl.setCupSize("B");
// girl.setAge(19);
// girl.setMoney(22.22);
//ObjectMapper 是一个可以重复使用的对象
ObjectMapper mapper = new ObjectMapper();
String jsonString = "{\"cupSize\":\"B\", \"age\":19, \"money\":22.22}";
//将JSON字符串值转换成 Girl对象里的属性值
Girl girl = mapper.readValue(jsonString, Girl.class);
mvc.perform(MockMvcRequestBuilders.post("/girlsss")
.contentType(MediaType.APPLICATION_JSON_UTF8)
/* 使用writeValueAsString() 方法来获取对象的JSON字符串表示 */
.content(mapper.writeValueAsString(girl)))
.andExpect(MockMvcResultMatchers.status().isOk())
.andExpect(MockMvcResultMatchers.content().contentType(MediaType.APPLICATION_JSON_UTF8))
.andExpect(MockMvcResultMatchers.jsonPath(
"$.cupSize").value("B"))
.andExpect(MockMvcResultMatchers.jsonPath(
"$.age").value(19))
.andExpect(MockMvcResultMatchers.jsonPath(
"$.money").value(22.22));
}
}
注解含义:
@RunWith(SpringRunner.class):表示使用Spring Test组件进行单元测试,其中SpringRunner继承类SpringJUnit4ClassRunner。
@WebAppConfiguration:测试环境使用,用来表示测试环境使用的ApplicationContext将是WebApplicationContext类型的;value指定web应用的根;
@AutoConfigureMockMvc:注入一个MockMvc实例;
注入web环境的ApplicationContext容器:mvc = MockMvcBuilders.webAppContextSetup(context).build();
使用ObjectMapper等同于对Girl对象直接赋值再转换为json格式。