• 카테고리

    질문 & 답변
  • 세부 분야

    백엔드

  • 해결 여부

    해결됨

Repository Test에 관해서 질문 드립니다.

24.04.19 16:03 작성 24.04.19 16:13 수정 조회수 59

0

강의 다 보고 코드 복습하고 있는데 Repository 테스트를 진행한 걸 보고 의문점이 들었습니다.

처음에 Jdbc, Jpa 등 DB 연결을 하지 않았을 때는 아래처럼 메소드 구현하고 테스트 한 것으로 이해했습니다.

(1) DB와 연동되어있지 않은 클래스 테스트 (in-memory-database(IMDB))

MemberRepository -> MemoryMemberRepository 구현 -> MemoryMemberRepositoryTest 테스트

그렇다면 만약 Jpa를 구현하게 된다면 어떻게 테스트를 진행해야 할지 궁금합니다.

Jpa를 사용하는 Repository인 경우 별개로 IMDB에서만 단위/통합 테스트를 진행하는 것이 좋을까요? 

테스트를 어떻게 해야할지 생각해봤는데 (1), (2) 둘 중에 어느 방안으로 진행해야 할까요?

(2) Jpa로 구현되어있는 클래스 테스트

MemberRepository -> JpaMemberRepository 구현 -> JpaMemberRepositoryTest 테스트

 

그리고 Repository로 단위 테스트 진행 후, 통합 테스트도 진행이 필요한지 궁금합니다.

답변 1

답변을 작성해보세요.

0

인프런 AI 인턴님의 프로필

인프런 AI 인턴

2024.04.19

안녕하세요, 인프런 AI 인턴입니다.

김지연님의 질문에 대한 답변을 준비했습니다.

질문 내용에는 Jpa를 사용했을 때의 Repository 테스트 방법테스트 종류(단위 테스트, 통합 테스트)에 대한 궁금증이 포함되어 있습니다.

JPA로 구현된 클래스 테스트 방법

JPA를 사용한 Repository 테스트를 진행할 때 가장 먼저 고려해야 할 것은 테스트 유형입니다. JPA 구현 클래스에 대해 직접적인 단위 테스트는 다소 복잡성이 있습니다. 이는 JPA가 데이터베이스와의 상호작용을 기반으로 하기 때문에, 실제 데이터베이스 연결을 가정하거나 대체할 수 있는 테스트 환경 구성이 필요하기 때문입니다.

JPA 테스트의 핵심 목표는 Repository가 데이터베이스와의 상호작용을 올바르게 수행하는지 확인하는 것입니다. 따라서 @DataJpaTest 어노테이션을 사용하여 Spring Data JPA와 함께 제공되는 테스트 지원을 활용하는 것이 일반적입니다.

  • @DataJpaTest는 JPA 관련 설정만 로드하며, DataSource를 사용하는 Repository 등을 테스트하는 데 적합합니다. 이 어노테이션은 in-memory 데이터베이스를 사용하여 Repository의 올바른 동작을 검증하고, 테스트가 완료된 후 데이터를 자동으로 롤백합니다.

Repository로 단위 테스트 진행 후 통합 테스트 필요성

Repository 테스트 후 통합 테스트의 필요성에 대해 질문하셨는데, 통합 테스트는 애플리케이션의 다양한 레이어와 부품들이 함께 올바르게 작동하는지 확인하는 데 중요합니다. 특히, Spring Boot 애플리케이션에서는 @SpringBootTest 어노테이션을 사용해 실제 애플리케이션 컨텍스트를 로드하여 테스트를 실행할 수 있으며, 이를 통해 더 넓은 범위의 통합 테스트를 수행할 수 있습니다.

질문에 대한 더 구체적인 답변을 찾고자 한다면, 이미 발표된 관련 질문을 참조하는 것이 좋습니다. 예를 들어, “JpaMemeberRepository unit test“와 “Repository 테스트 관련해서 질문드립니다” 링크에서 비슷한 주제에 대한 논의를 찾아보실 수 있습니다. 이들은 JPA에 초점을 맞춘 단위 테스트와 통합 테스트에 관한 시사점을 제공할 것입니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.