2024. 3. 22. 00:01ㆍ[Way to PM] 백 엔드
Over View
해당 글은 스프링부트 프레임워크의 핵심 개념인 테스트코드 학습 중 결과 확인에 대한 내용을 다룹니다.
테스크 코드는 대개 given, when, then 구문으로 구성됩니다.
given절은 테스트코드를 실험하는데 필요한 데이터를 준비하고,
when절은 테스트하고 싶은 기능을 수행하며,
then절은 수행한 기능의 결과를 확인합니다.
인텔리제이 기준 검증하고자 하는 컨트롤러에 ctrl + shift + T 단축키를 통해 쉽게 생성할 수 있으며, 반대로 테스트코드에서도 동일한 단축키로 실제 메서드가 있는 클래스에 바로 이동할 수 있습니다.
@Test
void update() throws Exception {
// given : 저장할 데이터
Article article = blogRepository.save(new Article("제목", "내용"));
Long id = article.getId();
AddArticleRequest articleRequest = new AddArticleRequest("a", "a");
// when : UPDATE /api/articles/{id}
ResultActions resultActions = mockMvc.perform(put("/api/articles/{id}", id)
.contentType(MediaType.APPLICATION_JSON)
.content(objectMapper.writeValueAsString(articleRequest)));
Article updateTest = blogRepository.findById(id).orElseThrow();
//수정 후 다시 조회
// then : 삭제 결과 확인
resultActions.andExpect(status().isOk())
.andExpect(jsonPath("title").value(updateTest.getTitle()))
.andExpect(jsonPath("content").value(updateTest.getContent()))
;
// 삭제 결과
// Article updateTest = blogRepository.findById(id).orElseThrow();
assertThat(updateTest.getTitle()).isEqualTo("a");
assertThat(updateTest.getContent()).isEqualTo("a");
}
1. update메서드가 의도대로 작동하는지 확인하기 위해 수정할 데이터를 save메서드를 통해 준비하고, Pathvariable과 then절에 사용할 id값도 변수에 할당해줍니다.
2. ResultAction 객체에 미리 주입해둔 mockMvc 객체를 할당합니다.
mockMvc는 perform메서드를 통해 검증하고자하는 실제 메서드 uri에 put방식으로 json으로 파싱된 데이터 값을 http 요청으로 보낸후 값을 받아와 resultActions에 할당합니다.
3. 값이 제대로 변경되었는지 findById로 조회한 후 Article(엔티티) 객체에 할당하고, andExpect 메서드 체인을 통해 응답 상태가 올바르게 반환되었다면 jsonPath에 value값이 원하는 대로 변경되었는지 확인합니다.
4. 추가로 JUnit이나 AssertJ의 Assrtions 클래스의 메서드를 통해 테스트 결과값을 확인할 수 있다. expected 값과 actual 값이 서로 일치하면 테스트는 pass되고, 불일치하면 failed을 맞게되는데, 이때 예상값과 실제값이 어떤 값으로 다른지도 제시해줍니다.
불일치가 발생한 라인을 기준으로 break point를 걸어 디버깅해서 각 구문 실행 후 데이터 값을 확인하거나, 그래도 문제가 없다면 변수의 선언과 일치, 또는 controller나 service 레이어에서 메서드 기능이 누락되었을 가능성을 검토합니다.
'[Way to PM] 백 엔드' 카테고리의 다른 글
[Way to PM] 백 엔드(스프링부트) - 스프링 시큐리티 인증된 유저 정보 가져오기 (0) | 2024.04.15 |
---|---|
[Way to PM] 백 엔드(스프링부트) - 연관 관계 매핑 (0) | 2024.03.26 |
[Way to PM] 백엔드(스프링부트) - JPA Update Method (0) | 2024.03.20 |
[Way to PM] 백엔드(스프링부트) - .yml 파일에 MyBatis 적용 시 띄어쓰기의 중요성 (0) | 2024.03.09 |
[Way to PM] 백엔드(스프링부트) - MVC (3) | 2024.03.09 |