해결된 질문
작성
·
754
0
안녕하세요 강사님
강의 시청중 궁금한 부분이 생겨서 질문을 드리게 되었습니다.
섹션 6. 실무 활용 - 스프링 데이터 JPA와 Querydsl - 사용자 정의 리포지토리 부분 입니다.
질문 드립니다.
사용자 정의 리포지토리를 같은 패지키안에 생성 하고 테스트(@DataJpaTest)를 동작하면 정상 동작이 됩니다.
관련 테스트 코드
@DataJpaTest
class PostsRepositoryTest {
@Autowired
private PostsRepository postsRepository;
@Test
@DisplayName("커스텀 리포지토리 테스트 해보기")
void custom_repository_test() {
postsRepository.search();
}
}
infra 패키지를 생성 후 PostsRepositoryImpl 를 구현하고 단위 테스트(@DataJpaTest)를 동작하면
postsRepository 관련 에러가 출력이 되서요
에러 로그----
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'postsRepository': FactoryBean threw exception on object creation; nested exception is java.lang.IllegalArgumentException: Failed to create query for method public abstract void com.springboottest.www.springboottest.domain.posts.PostsRepositoryCustom.search()! No property search found for type Posts!
에러 로그----
@SpringBootTest 통합 테스트로 진행하면 정상 동작을 합니다.
그리고 컨트롤러를 생성 후 브라우저에서 직접 호출을 해도 정상 동작을 합니다.
단위 테스트(@DataJpaTest)로 테스트시 구글링 해봤는데요
@DataJpaTest(includeFilters = { @ComponentScan.Filter(Service.class), @ComponentScan.Filter(Component.class), @ComponentScan.Filter(Repository.class) })
위와 같이 지정을 해주면 정상 동작은 합니다.
다른분들이 질문하신 목록은 모두 보았는데 저랑 비슷하게 고민하시는 분들은 없는것 같아서요
혹시 강사님은 어떻게 패키지 구조를 사용하시는지와
@DataJpaTest 어노테이션만 활용해서 테스트 진행할 방법이 없는지 궁금해서요
최근 DDD 관련 책을 읽어 보고 있는데
도메인과 인프라스트럭처 영역을 구분해서 패키지 구조를 나누는 부분을 실습해 보고 있어서요
제가 코드 구성하는 부분은 Spring Data Mongo로 구성을 하고 있는데
사용자 정의 리포지토리 부분은 비슷한 부분이 많아서 많은 도움이 되었습니다!
시간 되시면.. Spring Data Mongo 강의도 만들어 주시면 좋을것 같습니다 ㅜ
읽어 주셔서 감사합니다.
답변 3
1
1
안녕하세요 강사님
답변 주셔서 감사합니다. 늦은 시간에 답변 주셨내요 ㅜ
답변 주신 내용은 이해 하였습니다! ( 부트로 프로젝트 생성시 참고 하겠습니다)
해당 강의에 다른 분들께 답변 주신 부분도 읽어 보았는데요
인프런 강사님들 중에서 친절히 답변 주시는분은 얼마 없는데 정말 자세히 설명해 주셔서 감사합니다.
최고 입니다!!
(인프런에서 최고의 피드백 왕 선출 하는게 있으면 아마 1등 하시지 않을까 생각됩니다)
예전에도 메일로 문의 드리긴 했었는데 그때도 ㅜㅜ 너무 감사했습니다.
그때 프로젝트 하느라.. 감사하다는 메일도 못드렸네요;;
정말 감사했습니다 ㅜ
1
안녕하세요. 류재준님^^ 좋은 질문입니다.
@DataJpaTest는 기본적으로 JPA 테스트를 위한 최소한의 스프링 빈만 컨테이너에 로딩합니다. 제가 사용하는 빈들을 기본 설정으로 로딩하지 않습니다.
그래서 저는 실무에서 테스트를 작성할 때 @DataJpaTest를 잘 사용하지 않습니다. 실무에서는 이미 @SpringBootTest를 사용하고 있는데, 이렇게 추가 테스트가 들어가면 스프링 컨테이너가 추가로 한번 더 실행되어야 합니다.
@DataJpaTest는 JPA에 한정해서 기능을 테스트할 때 사용하는 것이 목적입니다. 따라서 재준님의 고민도 @SpringBootTest를 사용하시는게 맞습니다^^
API 문서에 있는 내용을 남겨둘께요.
Annotation for a JPA test that focuses only on JPA components. Using this annotation will disable full auto-configuration and instead apply only configuration relevant to JPA tests
If you are looking to load your full application configuration, but use an embedded database, you should consider @SpringBootTest combined with @AutoConfigureTestDatabase rather than this annotation
추가로 스프링 데이터 몽고는 스프링 데이터 JPA를 한번 이해하셨으면 편리하게 사용할 수 있는 내용이어서 오히려 몽고 자체를 이해하는게 중요하다 생각합니다^^
감사합니다^^