스프링에서 의존성을 주입받는 방법은 크게 4가지가 있다.
1. 생성자를 통해서 의존성을 주입
-> 특히 롬복(Lombok)의 @RequiredArgsConstructor를 사용해서
final 타입의 필드를 주입받는 것이 널리 사용된다.
2. 필드에서 @Autowired로 직접 주입
3. setter 메서드를 만들어서 의존성을 주입
4. 기타 특정한 메서드를 만들어서 의존성을 주입
특히 build.gradle에 아래와 같이 dependencies를 추가하면
테스트 클래스에서도 롬복을 사용할 수 있어서 자주 사용하곤 한다.
// 테스트에서 lombok 사용
testCompileOnly 'org.projectlombok:lombok'
testAnnotationProcessor 'org.projectlombok:lombok'
위와 같이 테스트 클래스에서 EntityManager를 롬복을 사용해서 생성자 주입을 하면 어떻게 될까?
이렇게 JUnit이 ParameterResolver를 찾지 못했다고 에러를 발생시킨다.
결론부터 이야기 하자면
JUnit5의 경우 빈 주입은 @Autowired 어노테이션을 사용해서 필드에서 해야 한다.
프로덕트 환경, 테스트 환경은 각각 관리하고 있는 프레임워크의 주체가 다르다.
JUnit5에서는 Jupiter가 주체이기 때문에, @Autowired로 명시해야
Jupiter가 의존성 주입을 스프링 컨테이너에게 요청하게 되어서, 정상적으로 의존성을 주입받을 수 있게 된다.
'Spring > 스프링 부트와 JPA 실무 완전 정복 로드맵' 카테고리의 다른 글
[JPA 기본편] - JPA 프로젝트 세팅하기 (JDK 11, Gradle, 스프링 부트 없이) (0) | 2023.02.05 |
---|