🔥딱 8일간! 인프런x토스x허먼밀러 역대급 혜택

워밍업 클럽 4기 백엔드 - [Day 18 미션]

미션 내용

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

  • @Mock

    • Spring Context와 무관

    • 실제 객체 대신 가짜(mock) 객체 생성

  • @Spy

    • 일부는 실제 객체처럼 , 일부는 Stubbing이 가능

  • @InjectMocks

    • 테스트 대상 객체에 필요한 Mock들을 자동 주입

  • @MockBean

    • Spring Context에 등록된 기존 Bean을 Mock으로 교체

    • 전체 애플리케이션 컨텍스트가 필요한 통합 테스트에서 주로 사용

       

  • @SpyBean

    • Spring Context에 등록된 기존 Bean을 Spy로 교체

     

 

  1. 아래 3개의 테스트가 있습니다.

     

    게시판 게시물에 달리는 댓글을 담당하는 Service Test
    댓글을 달기 위해서는 게시물과 사용자가 필요하다.
    게시물을 올리기 위해서는 사용자가 필요하다.

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

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

@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: 실용적인 테스트 가이드


댓글을 작성해보세요.

채널톡 아이콘