Coding/Back - Spring Framework

Spring Testing Mockito 3/3

꿀딴지- 2023. 9. 11. 14:00
  • Spring Framework 자체적으로도 지원하고 있는 Mocking 라이브러리
  • Mock 객체를 생성하고, 해당 Mock 객체가 진짜처럼 동작하게 하는 역할
  • Mockito의 Mocking 기능을 이용해서 테스트하고자 하는 대상에서 다른 영역(다른 계층 또는 외부 통신이 필요한 서비스 등)을 단절시켜 오로지 테스트 대상에만 집중
  • Stubbing : 테스트를 위해서 Mock 객체가 항상 일정한 동작을 하도록 지정하는 것
  • 다른 영역을 목킹해서 마치 구현한것럼 가정하고 테스트 코드를 짬

슬라이스 Test

@MockBean(필드) : Application Context에 등록되어 있는 Bean에 대한 Mockito Mock 객체를 생성하고 주입

given() : Mock 객체가 특정 값을 리턴하는 동작을 지정하는 데 사용하며, Mockito에서 지원하는 when()과 동일한 기능

given(memberService.createMember(Mockito.any(Member.class))).willReturn(member);

비즈니스 로직 Test : 서비스 계층에 구현된 비즈니스 로직 자체를 Spring Framework의 도움을 받지 않고도 빠르게 테스트를 진행

@ExtendWith(MockitoExtension.class) : Spring을 사용하지 않고, Junit에서 Mockito의 기능을 사용

@Mock(필드) : 해당 필드 객체를 Mock 객체로 인식

@InjectMocks(필드) : 생성한 Mock 객체를 주입 - @BeforeEach 생성자 주입과 동일

@Mock
private BookRepository bookRepository;

private BookServiceImpl bookService; //테스트할 대상
@BeforeEach //테스트 자체를 하기 위한 사전준비(메서드 내의 모든 테스트를 수행하기 위함)
    void beforeEach(){ //테스트 시 초기화 해야할 내용을 기입한다 - 마치 생성자처럼 사
        this.bookService = new BookServiceImpl(bookRepository);
}