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

- 찾기 쉽게 하기 위해
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