BookRepositoryTest - 책 등록하기

jihan kong·2022년 8월 23일
0

JUnit5

목록 보기
6/25
post-thumbnail

본 시리즈는 메타 코딩님의 Junit 강의를 학습한 내용을 바탕으로 정리하였습니다.

저번 포스팅에 이어 계속해서 BookRepositoryTest 를 개발하고 있다.
Repository 에 책을 등록하는 테스트 코드 작성을 마무리해보자.


BookRepositoryTest.java

// ...import 생략

@DataJpaTest    
public class BookRepositoryTest {

    @Autowired 
    private BookRepository bookRepository;

    // 1. 책 등록
    @Test
    public void 책등록_test() {
        // given (데이터 준비)
        String title = "junit5";
        String author = "메타코딩";
        Book book = Book.builder()
            .title(title)
            .author(author)
            .build();

        // when (테스트 실행)
        Book bookPS = bookRepository.save(book);

        // then (검증)
        assertEquals(title, bookPS.getTitle());
        assertEquals(author, bookPS.getAuthor());
    } // 트랜잭션 종료 (저장된 데이트를 초기화함)
}

given, when, then 패턴

책 등록 테스트는 given, when, then 패턴으로 진행할 것이다. 이 패턴은 김영한 님의 스프링 강의(인프런) 에서 배운적이 있었다.

테스트를 하기 위해 준비해야할 데이터들을 given 에 세팅하고, 실제로 when 에서 save와 같은 메소드를 통해 테스트를 실행시킨다. 마지막으로 then 에서는 실행한 테스트가 실제 DB에 잘 반영되었는지 assertEquals 메소드를 통해 검증한다.

📌 참고
여기서 Book class 즉, DB에 저장할 때, bookPS 라고 한 것은 영구적인 저장을 나타내기 위해 Persistence (영속적인, 지속적인) 의 약자를 사용했다.


"책 등록" 동작의 흐름

일단 책을 등록하는 방식이 어떻게 흘러가는지를 알아야 필요한 컨트롤러 혹은 DTO 와 같은 객체를 생성할 수 있다.

flow

Controller 에서 client로부터 책에 관한 정보 (title, author) 요청을 받음 ->
BookSaveReqDto 로 값을 저장 -> ③ Service 로 넘겨줌 ->
Book Entity로 변환 ->
BookRepository.save(book) 를 통해 Repository에 저장
(DB 데이터와 동기화)

위의 흐름대로라면 Controller 에서 client로부터 titleauthor 의 정보를 DTO에 담아 저장하는 과정이 필요하다. DTO를 하나 만드는게 좋겠다.
main 하위에 만들어놓은 dto 폴더에 BookSaveReqDto.java 파일을 하나 생성한다.

BookSaveReqDto.java

package site.metacoding.junitproject.web.dto;

import lombok.Getter;
import lombok.Setter;
import site.metacoding.junitproject.domain.Book;

@Getter
@Setter  // Controller에서 Setter가 호출되면서 Dto에 값이 채워짐...
public class BookSaveReqDto {
    private String title;
    private String author;
    
    public Book toEntity() {
        return Book.builder()
                .title(title)
                .author(author)
                .build();
    }
}

자, 이제 책 등록 테스트를 실행시켜보자.

테스트가 오류없이 잘 동작한 것을 볼 수 있다.

profile
학습하며 도전하는 것을 즐기는 개발자

0개의 댓글