각각의 테스트함수가 종료될 때마다 트랜잭션을 rollback 해주는 어노테이션
spring.test.mockmvc의 설정을 로드하면서 MockMvc의 의존성을 자동으로 주입, MockMvc 클래스는 Rest API 테스트를 할 수 있는 클래스
@SpringBootTest
@Transactional
@AutoConfigureMockMvc
class ReportRestControllerTest {
@Autowired MockMvc mvc;
@Autowired ReportRepository reportRepository;
@Autowired ObjectMapper objectMapper = new ObjectMapper();
@Test
void createReport() throws Exception {
//Given(테스트를 하기 위한 준비)
String testName = "테스트";
String testCreateUserId = "abcde@gmail.com";
String testDescription = "테스트 리포트 description ";
String testText = "테스트 리포트 text";
String testWorkId = "testworkid";
String testPrtId = "testprtid";
String testExpId = "testexpid";
CoreRequestDTO coreRequestDTO = new CoreRequestDTO();
coreRequestDTO.setAccessType("create");
LinkedHashMap reqMap = new LinkedHashMap();
reqMap.put("name",testName);
reqMap.put("create_user_id",testCreateUserId);
reqMap.put("create_time", LocalDateTime.now(ZoneId.of("Asia/Seoul")));
reqMap.put("description",testDescription);
reqMap.put("text",testText);
reqMap.put("work_id",testWorkId);
reqMap.put("prt_id",testPrtId);
reqMap.put("exp_id",testExpId);
coreRequestDTO.setReqDetail(reqMap);
//When(테스트 실행)
ResultActions resultActions = mvc.perform(MockMvcRequestBuilders.post("/api/core/report")
.contentType(MediaType.APPLICATION_JSON)
.content(objectMapper.writeValueAsString(coreRequestDTO))
.accept(MediaType.APPLICATION_JSON));
//Then(검증)
resultActions //mvc.perform()에 대한 결과 검증
.andExpect(status().isOk())//상태가 200인지 확인
.andExpect(jsonPath("$.resResult.name").value(testName)) //테스트로 응답받은 데이터와 response Body의 데이터가 동일한지 확인
.andExpect(jsonPath("$.resResult.description").value(testDescription)) //테스트로 응답받은 데이터와 response Body의 데이터가 동일한지 확인
.andExpect(jsonPath("$.resResult.text").value(testText)) //테스트로 응답받은 데이터와 response Body의 데이터가 동일한지 확인
.andDo(print()); //요청, 응답 전체 메세지를 콘솔로 확인
}
@Test
void readReport() throws Exception {
//Given(테스트를 하기 위한 준비)
int testReportId = 118;
//When(테스트 실행)
ResultActions resultActions = mvc.perform(MockMvcRequestBuilders.get("/api/core/report/{reportId}",testReportId)
.contentType(MediaType.APPLICATION_JSON)
.accept(MediaType.APPLICATION_JSON));
//Then(검증)
resultActions
//mvc.perform() 결과 검증
.andExpect(status().isOk())
.andExpect(jsonPath("$.resResult.id").value(testReportId))
.andDo(print());
}
@Test
void updateReport() throws Exception {
//Given(테스트를 하기 위한 준비)
String testReportId = "213";
String testUpdateName = "테스트 리포트 이름 업데이트";
String testUpdateUserId = "jh.okestro@gmail.com";
String testUpdateDescription = "테스트 리포트 description ";
String testUpdateText = "테스트 리포트 text";
String testWorkId = "testworkidworkid";
String testPrtId = "testprtidprtid";
String testExpId = "testexpidexpid";
CoreRequestDTO coreRequestDTO = new CoreRequestDTO();
coreRequestDTO.setAccessType("update");
LinkedHashMap reqMap = new LinkedHashMap();
reqMap.put("name",testUpdateName);
reqMap.put("update_user_id",testUpdateUserId);
reqMap.put("update_time", LocalDateTime.now(ZoneId.of("Asia/Seoul")));
reqMap.put("description",testUpdateDescription);
reqMap.put("text",testUpdateText);
reqMap.put("work_id",testWorkId);
reqMap.put("prt_id",testPrtId);
reqMap.put("exp_id",testExpId);
coreRequestDTO.setReqDetail(reqMap);
//When(테스트 실행)
ResultActions resultActions = mvc.perform(MockMvcRequestBuilders.put("/api/core/report/{reportId}",testReportId)
.contentType(MediaType.APPLICATION_JSON)
.content(objectMapper.writeValueAsString(coreRequestDTO))
.accept(MediaType.APPLICATION_JSON));
//Then(검증)
resultActions //mvc.perform()에 대한 결과 검증
.andExpect(status().isOk())//상태가 200인지 확인
.andExpect(jsonPath("$.resResult.targetName").value(testUpdateName)) //테스트로 응답받은 데이터와 response Body의 데이터가 동일한지 확인
.andDo(print()); //요청, 응답 전체 메세지를 콘솔로 확인
}
@Test
void deleteReport() throws Exception {
//Given(테스트를 하기 위한 준비)
int reportId = 119;
CoreRequestDTO coreRequestDTO = new CoreRequestDTO();
coreRequestDTO.setAccessType("delete");
//When(테스트 실행)
ResultActions resultActions = mvc.perform(MockMvcRequestBuilders.delete("/api/core/report/{reportId}",reportId)
.contentType(MediaType.APPLICATION_JSON)
.content(objectMapper.writeValueAsString(coreRequestDTO))
.accept(MediaType.APPLICATION_JSON));
//Then(검증)
resultActions
//mvc.perform()에 대한 결과 검증
.andExpect(status().isOk())
.andDo(print()); //요청, 응답 전체 메세지를 확인
}
}//ReportRestControllerTest
와우!~ 역시 주현님 나날이 발전하시는군요?? 앞으로 더 화이팅 해봅시다 😍