워밍업 클럽 4기 백엔드 - Mock Test

1. @Mock, @MockBean, @Spy, @SpyBean, @InjectMocks 차이

  • @Mock
    단순한 Mockito 목 객체 생성 (단위 테스트에 사용). Spring context와 무관.

  • @MockBean
    Spring context에 목 객체를 주입. 통합 테스트(@SpringBootTest 등)에서 사용. 기존 빈 교체.

  • @Spy
    실제 객체를 감싸면서 특정 메서드만 mocking.

  • @SpyBean
    Spring context에 있는 빈을 Spy로 감싸서 주입.

  • @InjectMocks
    해당 객체에 @Mock이나 @Spy로 선언된 의존성 주입.


2. @BeforeEach, given절, when절 배치

@BeforeEach
void setUp() {
    1-1. 사용자 생성에 필요한 내용 준비
    1-2. 사용자 생성
    1-3. 게시물 생성에 필요한 내용 준비
    1-4. 게시물 생성
}

@DisplayName("사용자가 댓글을 작성할 수 있다.")
@Test
void writeComment() {

    // given
   1-5. 댓글 생성에 필요한 내용 준비

    // when
   1-6. 댓글 생성

    // then
    검증
}

@DisplayName("사용자가 댓글을 수정할 수 있다.")
@Test
void updateComment() {

    // given
   2-5. 댓글 생성에 필요한 내용 준비
   2-6. 댓글 생성

    // when
   2-7. 댓글 수정

    // then
    검증
}

@DisplayName("자신이 작성한 댓글이 아니면 수정할 수 없다.")
@Test
void cannotUpdateCommentWhenUserIsNotWriter() {

    // given
   3-3. 사용자2 생성에 필요한 내용 준비
   3-4. 사용자2 생성
   3-7. 사용자1의 댓글 생성에 필요한 내용 준비
   3-8. 사용자1의 댓글 생성

    // when
  3-9. 사용자2가 사용자1의 댓글 수정 시도

    // then
    검증        
}

(Practical Testing: 실용적인 테스트 가이드)

댓글을 작성해보세요.

채널톡 아이콘