@MockBeen 과 @Autowired 의 차이

CokeBear·2022년 6월 10일
3

spring

목록 보기
7/15

테스트 코드 작성 중 @MockBean과 @Autowired가 뭐가 다른지 궁금해짐


1. @AutoWired ?

  • 필요한 의존 객체의 타입에 해당하는 빈을 찾아 주입.
  • @SpringBootTest 에 의해 띄워진 빈들중 찾아서 주입하는 것. -이미 구현된 내용을 사용.

2. @MockBeen ?

  • Mock은 껍데기만 있는 객체
  • Mock Bean은 기존에 사용되던 Bean의 껍데기만 가져오고 내부의 구현 부분은 모두 사용자에게 위임한 형태.

3. 차이점?

AutoWired로 의존 주입 후 테스트 하는 경우 실제 구현된 내용이 사용됨.
예를 들면 이메일 서비스를 테스트하는 경우 이메일이 실제로 보내짐.
그러나 mockBean은 껍데기만 가지고 오기 때문에 이메일이 보내지지 않으며,
사용자가 이메일을 보내는 것과 같은 기대값을 넣어 테스트 할 수 있다.




코딩중 Mockbean사용시에는 오류가 나지 않으나 Autiwired를 사용하면 오류가 발생하는 이슈

테스트 코드 중 EmailService 부분에서 Bean을 찾을 수 없다는 오류가 발생됨.

해결방법

  1. @Component 어노테이션이나 @Service 어노테이션을 등록 -> 동일한 오류 발생
  2. 오류나는 부분을 @MockBean 으로 생성

    -> MockBean 으로 생성하니 정상적으로 테스트코드가 잘 돌아감.

결과

어떤원인으로 발생된 오류인지는 모르겠으나 생각으론 SpringBootTest에 의해 띄워진 Bean 에게서 정상적으로 빈등록이 되지 않는 오류가 발생하였고, 그것을 MockBean으로 대체하니 내부 로직이 작동하지 않아 오류가 발생하지 않는것으로 판단.

profile
back end developer

0개의 댓글