이제 모든 과정을 마쳤다. 마지막으로 FreeBoardService#createBoard(); 메서드의 테스트를 완성시킬 단계다.
지난 과정에서 작성해놓았던 테스트 코드와 기능 코드는 다음과 같다.
@Test
void createBoardTest(){
FreeBoardDto.Post boardPostDto = new FreeBoardDto.Post();
FreeBoardDto.Response boardResponseDto = boardService.createFreeBoard(boardPostDto);
assertThat(boardResponseDto).isNull();
}
//////////////////////////////////
@Transactional
public FreeBoardDto.Response createFreeBoard(FreeBoardDto.Post postDto) {
FreeBoard entity = freeBoardConverter.convertPostDtoToEntity(postDto);
FreeBoard savedEntity = freeBoardCommandService.save(entity);
return null;
}
이제는 마지막 단계인 Entity -> Response DTO 변환 과정을 통해 생성된 Response DTO를 Return하면 된다. 변환 과정에 대한 테스트와 기능 구현은 별도로 글로 작성하지는 않겠다. 앞선 과정과 완전히 동일하기 때문이다. 완성된 변형 로직을 적용한 기능 코드는 다음과 같다.
@Transactional
public FreeBoardDto.Response createFreeBoard(FreeBoardDto.Post postDto) {
FreeBoard entity = freeBoardConverter.convertPostDtoToEntity(postDto);
FreeBoard savedEntity = freeBoardCommandService.save(entity);
return freeBoardConverter.convertEntityToResponseDto(savedEntity);
}
우리가 마무리 할 테스트는 Post DTO로 넘어간 값이 Response DTO에서 잘 넘어왔는지를 테스트해보면 될 것이다. 일단 간단하게 Response DTO를 만들었다.
@Getter
@Builder
public static class Response{
private String title;
private String content;
}
추후에 댓글 정보에 사용자 정보에 이것저것 들어갈 것을 고려해서 애초에 Builder를 적용해놨다. FreeBoardConverter#convertEntityToResponseDto() 메서드는 entity에서 제목과 내용 값을 가져와 reponse dto를 만들어서 반환한다. 이를 기반으로 수정한 테스트 메서드는 다음과 같다.
@Test
void createBoardTest(){
FreeBoardDto.Post boardPostDto = new FreeBoardDto.Post();
FreeBoardDto.Response boardResponseDto = boardService.createFreeBoard(boardPostDto);
assertThat(boardPostDto.getTitle()).isEqualTo(boardResponseDto.getTitle());
assertThat(boardPostDto.getContent()).isEqualTo(boardResponseDto.getContent());
}
그런데 이렇게 테스트 코드를 작성하고나서 @SpringBootTest를 떼는 과정을 수행하는 과정을 수행하는 중에 '왜 굳이 이런 형태의 아키텍처를 사용해야 하는가?' 에 대한 의문이 들었다. 애초에 CommandService와 QueryService로 Service계층을 나눌 생각이었는데, 얘는 필요가 있는가? 불필요한 컴포넌트가 하나 추가로 생긴 것 아닌가? 싶었다.
이렇게 생각한 가장 큰 계기는, 어짜피 다른 테스트를 작성하고 기능을 구현하는 과정에서 필요한 모든 로직을 처리했기 때문이다. 이 녀석의 필요가 전혀 없다. 그래서 내린 결론은 이 클래스 자체를 제거하면서 자유 게시글 구현을 마치는 것이다. 실제로 해당 클래스를 제거하고 애플리케이션을 실행시켜도 문제 없이 컴파일이 가능하다. 불필요한 클래스를 사용하고 있었던 것이다. 변환 과정은 나뉘어진 서비스 클래스에 주입해 사용해도 되고, 컨트롤러에 주입해 사용해도 될 것이다.
이렇게 자유 게시글 작성의 모든 과정을 마쳤다. 다음에는 수정 기능을 구현하고자 한다.
전체 코드는 링크에서 확인할 수 있다.
'Programming > TDD Project' 카테고리의 다른 글
Pull Request 010 - 자유게시글 조회 기능 TDD로 구현해보기 (0) | 2023.11.10 |
---|---|
Pull Request 009 - 자유게시글 수정 기능 TDD로 구현해보기 (0) | 2023.11.09 |
Pull Request 007 - 자유게시글 작성 기능 TDD로 구현해보기 - @SpringBootTest 제거하기 (1) | 2023.11.01 |
Pull Request 006 - 자유게시글 작성 기능 TDD로 구현해보기 - 게시글 저장 (0) | 2023.11.01 |
Pull Request 005 - 자유게시글 작성 기능 TDD로 구현해보기 - Post DTO를 Entity로 변경. (1) | 2023.10.25 |
댓글