Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 | 31 |
Tags
- 프로세스 할당
- 리눅스
- Effective Access Time
- 자바 알고리즘
- 스프링부트
- 문제풀이
- 다단계 페이지 테이블
- 자바 문제풀이
- 메모리의 불연속적 할당
- 메모리 관리
- Segmentation with Paging
- 프로세스 불연속 할당
- Inverted Page Table
- jpa
- spring
- 웹 프로그래밍
- 운영체제
- Shared Page
- 프로세스 동기화
- annotation
- Allocation of Physical Memory
- 코드스테이츠 백엔드 과정 39기
- 2단계 Page Table
- 알고리즘
- 웹개발
- springboot
- 스프링
- Page Table의 구현
- linux
- CS
Archives
- Today
- Total
GrowMe
[Error handling] Spring Boot 테스트 환경에서의 생성자 주입 본문
SpringBoot 테스트 환경에서 생성자 주입
# SpringBootTest
# JUnit
# 생성자 주입
# Autowired 주입
*issue 내용
- 미리 생성하여 빈으로 등록했던 OrderService와 OrderRepository를 생성자 주입하여 테스트 시도
- ParameterResolutionException 발생
*Why don't work???
- 직접 생성자를 타이핑하거나 lombok의 @Allargsconstructor, @RequiredArgsConstructor을 사용해 생성자 주입을 시도하면, JUnit5의 Jupiter가 생성자에 적당한 매개변수를 DI해야하는 데 그때 파라미터를 찾아줄 적당한 ParameterResolver를 못찾게된다.
- 스프링이라면 스프링 컨테이너가 알아서 컨텍스트영역에 등록된 스프링 빈을 찾아서 의존성주입했겠지만 JUnit이 제어하고있는 테스트코드 상황에서는 적당한 빈을 찾을 수 없게된다.
*그럼.. 어떻게 해결하면 될까??
1. JUnit 제어가 아닌 Spring 환경에서 bean을 찾을 수 있게 @Autowired 사용
2. lombok을 이용한 @Setter(onMethod_ = {@Autowired}) 수정자 주입방식
3. Junit에 존재하는, ParameterResolver에 맞는 타입의 파라미터 전달
- TestInfoParameterResolver
- RepetitionInfoParameterResolver
- TestReporterParameterResolver
4. 직접 사용자 ParameterResolver를 작성해서 JUnit가 인식할 수 있는 파라미터 값 전달
*알게된 점
- Junit의 테스트 환경에서의 빈 주입은 Spring과 다르게 진행이 된다.
- @SpringBootTest 어노테이션은 Spring Main Application(@SpringBootApplication)을 실행할때와 동일한 모든 Bean을 스캔하여 mock bean을 생성해준다.
*향후 과제
- Junit5의 테스트 방식
- 생성자 주입 시 위에 @Autowired를 생략 안하니 제대로 동작하네??.. 왜그럴까
- ParameterResolver에 대하여
'Why don't work?' 카테고리의 다른 글
Comments