[스프링 부트] 11. Repository 구현 및 테스트

lhs's avatar
Nov 17, 2024
[스프링 부트] 11. Repository 구현 및 테스트
 

1. BoardRepository

@RequiredArgsConstructor @Repository public class BoardRepository { private final EntityManager entityManager; public List<Board> findAll() { Query query = entityManager.createNativeQuery("select * from board_tb order by id desc", Board.class); return query.getResultList(); } }
  • entityManager.createNativeQuery : 네이티브 SQL 쿼리를 생성하는 메서드
    • 네이티브 SQL은 데이터베이스에 직접 작성된 SQL 문을 실행하며, 복잡한 쿼리나 성능 최적화가 필요한 경우에 주로 사용된다.
  • Board.class : 쿼리의 결과를 Board 엔터티 객체로 매핑
  • query.getResultList() : 쿼리의 결과를 List<Board> 형식으로 반환하는 메서드

2. BoardRepositoryTest

notion image
  • 찾기 쉽게 하기 위해 BoardRepository와 같은 패키지에 BoardRepositoryTest.java를 생성한다.
  • 테스트할 클래스명 뒤에 Test를 붙이는 컨벤션을 따른다.
@Import(BoardRepository.class) @DataJpaTest public class BoardRepositoryTest { @Autowired private BoardRepository boardRepository; @Test public void findAll_test() { // given parameter 입력할 매개변수 // findAll에 매개변수가 없어서 생략 // when method 테스트할 메서드 List<Board> boardList = boardRepository.findAll(); // then verify 검증 // eye로 대체 // eye 직접 확인 for (Board board : boardList) { System.out.println(board.getId()); System.out.println(board.getTitle()); System.out.println(board.getContent()); System.out.println(board.getCreatedAt()); System.out.println("============"); } } }
  • @Import(BoardRepository.class) : BoardRepository 클래스를 테스트 컨텍스트(IOC)에 가져오는 어노테이션
  • @DataJpaTest : JPA 관련 컴포넌트를 테스트할 때 DB관련 자원들을 메모리에 올리는 어노테이션
  • @Autowired : BoardRepository의 Bean 객체를 자동으로 주입하는 어노테이션
  • @Test : 테스트 메서드로 지정하는 어노테이션
    • main 메서드를 실행하지 않고 단독으로 실행할 수 있게 해준다.
  • findAll_test : findAll 메서드를 테스트하기 위한 테스트 메서드
    • 테스트 메서드는 _test를 붙이는 컨벤션을 따른다.
  • 테스트의 3가지 단계
    • given : 테스트를 위한 입력 값을 설정하는 단계
      • findAll() 메서드에서는 입력할 매개변수가 없어서 생략된다.
    • when : 테스트할 메서드를 실행하는 단계
      • findAll() 메서드를 실행하여 boardList에 결과를 저장한다.
    • then : 결과를 검증하는 단계
      • 출력으로 결과를 검증하는 방식으로 대체하였다.
 
Share article

LHS's Study Space