테스트 코드의 필요성에 대해 궁금하다. 미니홈페이지 프로젝트에 게시판 api에 테스트 코드를 적용해보며 그 가치를 직접 확인해보고자 합니다.
저는 Controller와 Service 계층에서 입력값 검증이 완료되었다고 가정하고, Repository 계층의 핵심 기능인 CRUD 동작을 검증하는데 집중했습니다. 아래는 제가 작성한 테스트 코드입니다.
@Test
@Transactional // 테스트 후 데이터 롤백
void 게시글을_등록_합니다(){
Post post = Post.builder()
.title("테스트용제목")
.content("테스트용내용")
.createdAt(LocalDateTime.now())
.userId(1L)
.build();
int result = postRepository.insert(post);
Assertions.assertThat(result).isEqualTo(1);
}
@Test
void 게시글_등록_시_null_값이_들어온다면(){
Post post = Post.builder()
.content("테스트용내용") // title 필드 누락
.createdAt(LocalDateTime.now())
.userId(1L)
.build();
assertThatThrownBy(() ->{
postRepository.insert(post);
}).isInstanceOf(DataAccessException.class);
}
위 코드는 게시글 등록에 대한 테스트 케이스입니다. 정상적인 게시글 등록과 필수 필드(title)가 누락된 경우를 테스트합니다. @Transactional 어노테이션을 사용하여 테스트 후 데이터가 롤백되도록 했습니다.
이외에도 게시글 조회, 수정, 삭제에 대해 다음과 같은 테스트를 구현했습니다.
각 테스트는 정상 케이스와 예외 케이스를 모두 고려하여 작성했으며, @Transactional을 통해 테스트 데이터를 관리했습니다.
테스트 코드는 개발 과정에서 발생할 수 있는 다양한 오류 상황을 사전에 발견하고 대응할 수 있게 해주는 강력한 도구입니다. 제가 이번 프로젝트에서 경험한 것처럼, 테스트 코드를 작성하면서 예상치 못한 에러 케이스들을 발견하고 처리할 수 있었습니다.
하지만 현실적인 고민도 있습니다. 테스트 범위를 설정하고, 테스트 케이스를 구현하고, 테스트 환경을 구축하는 과정에서 상당한 시간이 소요됩니다. 때로는 실제 기능 구현보다 테스트 코드 작성에 더 많은 시간을 투자해야 할 수도 있습니다.
테스트 코드의 가치와 필요성에는 공감하지만, 촉박한 일정의 프로젝트에서는 테스트 코드 작성이 현실적으로 어려울 수 있습니다. 저 역시 시간이 부족했던 프로젝트에서 테스트 코드를 포기해야 했던 경험이 있습니다.
결국 테스트 코드는 프로젝트의 품질을 높이는 중요한 요소이지만, 현실적인 제약 속에서 어떻게 균형을 맞출 것인가는 여전히 고민이 필요한 부분인 것 같습니다.