• 카테고리

    질문 & 답변
  • 세부 분야

    백엔드

  • 해결 여부

    미해결

MemberServiceV3_3Test 코드중 질문

22.10.06 15:03 작성 조회수 273

0

MemberServiceV3_3Test 테스트중

@Transactional 어노테이션을 쓰기위해

@SpringBootTest 어노테이션을 추가 시키는것 까지 이해는 했는데

(06:30 참고)

그 이후 이전 코드의 @BeforeEach 코드를 지우셨습니다.
(직접 주입)

그이후에 @TestConfiguration 을 추가해주셨는데
왜 꼭이렇게 빈을 주입해야 하나요 ?


( [MemberRepositoryV3, MemberServiceV3_3] << 이 두 객체를 @Autowired하지않고 이전 @BeforeEach로 사용했지만 안됌) - DataSource, PlatformTransactionManager 두 객체는 @Bean 설정 그 이후 테스트 실패.

 

결론적으로 MemberRepositoryV3,MemberServiceV3_3 이 둘 클래스도 왜 @TestConfiguration로 빈으로 주입해야 정상작동 하나요 ??

 

실패한 코드

===================================

@BeforeEach
void before(){
    memberRepository = new MemberRepositoryV3(TestConfig.dataSource());
    memberService = new MemberServiceV3_3(memberRepository);
}

@TestConfiguration
static class TestConfig{
    @Bean
    static DataSource dataSource(){
        return new DriverManagerDataSource(URL, USERNAME, PASSWORD);
    }

    @Bean
    PlatformTransactionManager transactionManager(){
        return new DataSourceTransactionManager(dataSource());
    }
}

 

답변 1

답변을 작성해보세요.

2

안녕하세요. H K님

스프링이 제공하는 트랜잭션 AOP를 사용하려면 스프링 컨테이너에 DataSource, TransactionManager 빈이 등록되어야 합니다.

그래서 이런 과정을 통해서 해당 빈들을 스프링 컨테이너에 등록하게 됩니다.

감사합니다.

H K님의 프로필

H K

질문자

2022.10.11

 memberRepository,  memberService 도 빈으로 등록 되어 있어야 하는건가요 ?
위 코드처럼 DataSource, TranscationManager은 빈으로 등록하고 memberRepository,memberService은 @BeforeEach로 햇더니 실패해서 질문드립니다 !

네 맞습니다. 스프링 빈으로 등록해야 합니다.

@Transactional이 적용되려면 스프링 빈이어야 합니다.

감사합니다.

H K님의 프로필

H K

질문자

2022.10.18

감사합니다