SpringBoot+mockMvc Controller層試験
6065 ワード
mockMvc
依存関係:
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-testartifactId>
<scope>testscope>
dependency>
Controller層コード:
@GetMapping(value = "/girls")
public List 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はクラスSpringJUnit 4 ClassRunnerを継承します.@WebAppConfiguration:テスト環境で使用され、テスト環境で使用されるApplicationContextがWebApplicationContextタイプであることを示す.value Webアプリケーションのルートを指定します.@AutoConfigureMockMvc:MockMvcインスタンスを注入します.
Web環境に注入されたApplicationContextコンテナ:
mvc = MockMvcBuilders.webAppContextSetup(context).build();
ObjectMapperを使用すると、Girlオブジェクトに直接値を割り当ててjson形式に変換することになります.