🎁 모든 강의 30% + 무료 강의 선물🎁

인프런 워밍업 스터디 클럽 3기 백엔드 Day 18미션

1. @Mock, @MockBean, @Spy, @SpyBean, @InjectMocks 의 차이를 한번 정리해 봅시다.

 

  • @Mock 기본적인 목(mock) 객체를 생성하고, 가짜 객체로 특정 메서드의 동작을 지정할 수 있다. 단위 테스트에서 실제 로직 대신 더미 데이터를 반환하는 데 사용한다.

  • @MockBean Spring 컨텍스트 내에 목 객체를 빈으로 등록한다. 애플리케이션의 특정 빈을 대체하여 통합 테스트를 진행할 수 있다.

  • @Spy 실제 객체를 생성하면서 일부 메서드만 모킹할 수 있다. 객체의 전체 동작을 유지하면서 특정 부분만 스텁으로 대체할 수 있다.

  • @SpyBean Spring 컨텍스트에서 실제 빈을 스파이로 등록한다. 특정 Spring 빈의 일부 메서드를 테스트용으로 대체할 수 있다.

  • @InjectMocks 테스트 대상 클래스의 인스턴스를 생성하고, 의존 객체들을 자동으로 주입한다. 외부 의존성 없이 독립적인 테스트를 가능하게 한다.

 

2. 아래 3개의 테스트가 있습니다. 내용을 살펴보고, 각 항목을 @BeforeEach, given절, when절에 배치한다면 어떻게 배치하고 싶으신가요? (@BeforeEach에 올라간 내용은 공통 항목으로 합칠 수 있습니다. ex. 1-1과 2-1을 하나로 합쳐서 @BeforeEach에 배치)

@BeforeEach 
void setUp() {
    // 사용자 생성에 필요한 내용 준비
    // 사용자 생성
    // 게시물 생성에 필요한 내용 준비
    // 게시물 생성
}

@DisplayName("사용자가 댓글을 작성할 수 있다.")
@Test
void writeComment() {
    // given
    // 댓글 생성에 필요한 내용 준비

    // when
    // 댓글 생성

    // then
    // 댓글이 정상적으로 작성되었는지 검증
}

@DisplayName("사용자가 댓글을 수정할 수 있다.")
@Test
void updateComment() {
    // given
    // 댓글 생성에 필요한 내용 준비
    // 댓글 생성
    // 댓글 수정에 필요한 내용 준비

    // when
    // 댓글 수정

    // then
    // 댓글이 정상적으로 수정되었는지 검증
}

@DisplayName("자신이 작성한 댓글이 아니면 수정할 수 없다.")
@Test
void cannotUpdateCommentWhenUserIsNotWriter() {
    // given
    // 사용자1 생성
    // 사용자2 생성
    // 사용자1의 게시물 생성
    // 사용자1의 댓글 생성
    // 사용자2가 댓글 수정 시도에 필요한 내용 준비

    // when
    // 사용자2가 댓글 수정 시도

    // then
    // 댓글 수정이 실패했는지 검증
}

 

강의 출처 - Practical Testing: 실용적인 테스트 가이드

댓글을 작성해보세요.


채널톡 아이콘