본 시리즈는 메타 코딩님의 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
에서 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로부터 title
과 author
의 정보를 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();
}
}
자, 이제 책 등록 테스트를 실행시켜보자.
테스트가 오류없이 잘 동작한 것을 볼 수 있다.