인프런 커뮤니티 질문&답변
contextLoads에서 에러가 발생합니다
작성
·
583
0
AllTest를 실행시키면 contextLoads에서 다음과 같은 에러가 발생합니다

에러의 내용은 memoryMemberRepository와 getMemberRepository / rateDiscountPolicy와 getDiscountPolicy 의 빈 충돌입니다.
AutoConfig의 ComponentScan에 excludeFilters를 제대로 작성을 했습니다.
MemoryMemberRepository 클래스와 RateDiscountPolicy 클래스에 @Primary 애너테이션을 붙여주면 AllTest가 모두 통과가 되는데 영한님께서는 @Primary를 붙이지 않고서도 통과가 됬는데 제건 어디서 꼬여버린걸까요...
소스코드가 필요하시다면 보내드리겠습니다.
추가 질문입니다.
1. contextLoads 이외의 우리가 작성한 테스트 케이스에서는 스프링 컨테이너의 설정 정보를 AutoConfig, AppConfig 중 하나만 넘겨줬는데 이럴 경우(테스트를 실행한 경우) 스프링 컨테이너의 설정 정보로 등록되지 않은 클래스도 (excludeFilters 정의 안해준 default 상황일 경우) 스프링의 빈으로 등록이 되는건가요?
퀴즈
What are the main reasons why Field Injection is generally not recommended?
Because it is difficult to guarantee immutability
Because changing dependencies is easy
Because it's difficult to test with pure Java code
Because writing configuration code is complex
답변 2
0
0
안녕하세요.
RateDiscountPolicy에 @Primary가 걸려있어야 합니다^^
여기에서 @MainDiscountPolicy 안에 @Primary가 되어 있는 것이지요.
@Component
@MainDiscountPolicy
public class RateDiscountPolicy implements DiscountPolicy {
추가로 질문하신 부분은 AutoConfig를 넘기게 되면 해당 설정과 그 안에 있는 빈들은 모두 적용됩니다.
간단히 빈들 등록하면서 테스트 해보시면 바로 이해가 되실거에요^^
감사합니다.





