BookRepositoryTest

jihan kong·2022년 8월 23일
0

JUnit5

목록 보기
5/25
post-thumbnail

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

이번에는 BookRepository 테스트를 위한 테스트 코드를 작성해보자.

도메인 폴더에 만들어 두었던 BookRepository.java 에 다음의 코드를 작성하자.

BookRepository.java

package site.metacoding.junitproject.domain;

import org.springframework.data.jpa.repository.JpaRepository;

public interface BookRepository extends JpaRepository<Book, Long> {
    
}

이제 기본적인 것들을 테스트 해보아야한다. 기본적인 것이라함은 서비스에 있어서 필수적인 등록, 조회, 수정, 삭제 (CRUD) 이다.

그런데 일단 테스트는 어떤 순서로 이루어져야할까?

스프링에는 웹 계층이 존재하는데 이는
Web(Controller) Layer, Service Layer, Repository Layer 이다.

여기서 잠깐 짚고 넘어가자.

Spring 웹 계층

1. Web Layer

: 흔히 사용하는 컨트롤러(@Controller) 와 JSP 등의 뷰 템플릿 영역. 이외에도 필터(@Filter), 인터셉터 등 외부 요청과 응답에 대한 전반적인 것들을 처리하는 계층이다.

2. Service Layer

: @Service 에 사용되는 서비스 영역. 일반적으로 Controller와 DAO의 중간 영역. @Transactional 이 사용되어야 하는 영역이기도 하다.

3. Repository Layer

: Database 와 같이 데이터 저장소에 접근하는 영역. DAO라고 이해하면 쉽다.


테스트 순서

위의 계층 구조 기반을 통해 테스트를 진행하려고 한다면 Repository -> Service -> Controller 순으로 진행하는 것이 좋다.

Repository 테스트를 통해 DB쪽에 저장이 잘 되는지 (쿼리가 잘 날아가는지) Service 테스트를 통해 기능들이 트랜잭션을 거쳐 잘 실행되는지, Controller 테스트를 통해 클라이언트와 요청을 주고 받으며 이를 잘 처리할 수 있는지 (null 처리 등) 처럼 각 영역에 해당하는 테스트를 생성하고 진행하는 것이 핵심이라고 할 수 있다.

BookRepository 테스트 생성

서론이 길었다. BookRepository 테스트를 구현해보자. test 폴더 하위에 domain 폴더에 만들어두었던 BookRepositoryTest.java 를 열어보자.

BookRepositoryTest.java

package site.metacoding.junitproject.domain;

import org.springframework.boot.test.autoconfigure.orm.jpa.DataJpaTest;

@DataJpaTest // 0.
public class BookRepositoryTest {
	// 1. 책 등록
    
    // 2. 책 목록 보기
    
    // 3. 책 한건 보기
    
    // 4. 책 수정
    
    // 5. 책 삭제
}

💡 DataJpaTest 어노테이션
스프링 부트는 테스트를 실행하지 않는다. 테스트는 테스트 환경에서 실행될 뿐이다. 이 때, 테스트 환경에서 Controller, Service, Repository 를 메모리에 모두 띄워서 테스트하는 것을 통합 테스트라고 한다. 그러나 우리는 지금 이 세 영역을 모두 띄울 필요는 없다.

다시 말해, Repository(DB) 만 부분적으로 테스트하려고 할 때, DataJpaTest 는 현재 DB와 관련된 컴포넌트들만 메모리에 로드 시켜준다. 즉, Controller, Service 는 메모리에 뜨지 않는다는 얘기다.


BookRepository 테스트 구현

간단하게 구현만 하고 print 문을 통해 테스트 해보자.

BookRepositoryTest.java

package site.metacoding.junitproject.domain;

import org.springframework.boot.test.autoconfigure.orm.jpa.DataJpaTest;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;

@DataJpaTest 
public class BookRepositoryTest {

	@Autowired  
	private BookRepository bookRepository;
    
	// 1. 책 등록
    @Test
    public void 책등록_test() {
    	System.out.println("책등록_test 실행");
    }
    // 2. 책 목록 보기
    
    // 3. 책 한건 보기
    
    // 4. 책 수정
    
    // 5. 책 삭제
}
  • @Autowired
    : 스프링이 관리하는 빈(Bean)을 주입받기 위해 사용하는 어노테이션 (DI). 당연히 bookRepository 를 테스트 해야 하기 때문에 bookRepository 를 주입해주는 것이다.

  • @Test
    : 테스트를 실행시킬 수 있는 어노테이션


이제 테스트를 진행시키기 위해 클래스 옆에 세모버튼을 눌러보자.

테스트 성공.

디버그 콘솔창을 통해 우리가 입력한 "책등록_test 실행" 에 대한 로그도 볼 수 있다.

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

0개의 댓글