[SPRING] @DataJpaTest로 Spring 테스트는 @Repository로 클래스를 autowire 할 수 없습니다 (하지만 인터페이스 저장소가 작동합니다!).
SPRING@DataJpaTest로 Spring 테스트는 @Repository로 클래스를 autowire 할 수 없습니다 (하지만 인터페이스 저장소가 작동합니다!).
나는 왜 내가 클래스 저장소를 autowire 할 수 없는지에 대해 이해하려고 노력하고있다. 그러나 같은 테스트를 위해 동일한 패키지에 인터페이스 저장소를 autowire 할 수있다. 동일한 저장소가 응용 프로그램을 시작할 때 예상대로 작동합니다.
첫째, 오류 :
Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'com.app.person.repository.PersonRepository' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}
at org.springframework.beans.factory.support.DefaultPersonbleBeanFactory.raiseNoMatchingBeanFound(DefaultPersonbleBeanFactory.java:1493)
at org.springframework.beans.factory.support.DefaultPersonbleBeanFactory.doResolveDependency(DefaultPersonbleBeanFactory.java:1104)
at org.springframework.beans.factory.support.DefaultPersonbleBeanFactory.resolveDependency(DefaultPersonbleBeanFactory.java:1066)
at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:585)
... 28 more
나는 아주 간단한 예를 가지고있다. 시험:
@RunWith(SpringRunner.class)
@DataJpaTest
public class PersonRepositoryTest {
@Autowired
private PersonRepository personRepository; // fail...
@Autowired
private PersonCrudRepository personCrudRepository; // works!
@Test
public void findOne() {
}
}
저장소 클래스 :
@Repository
public class PersonRepository {
//code
}
저장소 인터페이스 :
@Repository
public interface PersonCrudRepository extends CrudRepository<Person, Long> {
}
이 같은 오류와 함께 나쁜 경험을 한 후, 내 구성에서 일부 세부 사항을 찾거나이 문제의 원인을 테스트하려고합니다. 또 다른 가능성은 @DataJpaTest가 클래스 리포지토리를 지원하지 않는다는 것입니다.
해결법
-
==============================
1.나는 그 문제에 대해 내가 옳았다 고 생각한다. Github에서 게시물을 찾은 후 Spring 설명서를 읽습니다.
나는 그 문제에 대해 내가 옳았다 고 생각한다. Github에서 게시물을 찾은 후 Spring 설명서를 읽습니다.
Spring Data JPA 저장소가 아니기 때문에 PersonRepository는 일반 @Component로 간주됩니다 (인터페이스는). 따라서로드되지 않습니다.
대안은 @DataJpaTest 대신 @SpringBootTest를 사용하는 것입니다.
-
==============================
2.또 다른 대안은 https://stackoverflow.com/a/41084739/384674에 나와있는 @Import 일 수 있습니다.
또 다른 대안은 https://stackoverflow.com/a/41084739/384674에 나와있는 @Import 일 수 있습니다.
from https://stackoverflow.com/questions/48347088/spring-test-with-datajpatest-cant-autowire-class-with-repository-but-with-in by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] 봄 부팅 테스트 @ 거래가 저장되지 않음 (0) | 2019.04.24 |
---|---|
[SPRING] Flux <DataBuffer>의 압축을 해제하는 방법 (및 작성 방법) (0) | 2019.04.24 |
[SPRING] 도커가있는 스프링 부트가 요청 된 대상 오류에 대한 유효한 인증 경로를 찾을 수 없습니다. (0) | 2019.04.24 |
[SPRING] Cloud API 게이트웨이에 대한 응답 본문에 데이터를 추가하는 방법 (0) | 2019.04.24 |
[SPRING] Dozer의 사용자 지정 변환기를 사용하여 개체 목록을 다른 목록에 매핑 (0) | 2019.04.24 |