워밍업 클럽 2기 백엔드 클린코드&테스트 Day 18 미션

워밍업 클럽 2기 백엔드 클린코드&테스트 Day 18 미션

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

 

@Mock, @Spy 차이

- '가짜'이냐 '진짜'이냐의 차이

- @Spy' 진짜' 객체라면, 객체 내부의 메서드가 실행된다.

- @Mock '가짜' 객체라면, 객체 내부의 메서드가 실행되지 않는다.

 

@Mock과 @MockBean 차이

@Mock은 Spring과 독립적으로, 단위 테스트에서 객체의 특정 메서드를 모킹할 때 사용!

@MockBeanSpring Boot 통합 테스트나 Spring의 의존성 주입이 필요한 상황에서 사용되며, Spring 컨텍스트에 Mock 객체를 주입하여 해당 객체를 사용!

 

@Spy: Mockito 스파이 객체를 테스트 클래스 내부에서만 사용하며, Spring 컨텍스트와는 무관합니다. 단위 테스트에서 사용됩니다.

@SpyBean: Spring 애플리케이션 컨텍스트에 스파이 객체를 주입하여 Spring의 Bean과 상호작용할 수 있게 합니다. Spring 통합 테스트에서 사용됩니다.

 

@InjectMocks

@Mock 객체에 필요한 의존성을 주입해주는 역할을 수행한다.

 

2. 테스트 코드 문서화

  • 핵심은 중복 제거가 아닌, 도메인

  • 사용자, 게시물은 간접적이므로 setUp, 댓글은 직접적으로 given절

@BeforeEach 
void setUp() {
    1,2,3-1. 사용자 생성에 필요한 내용 준비
    1,2,3-2. 사용자 생성
    1,2,3-3. 게시물 생성에 필요한 내용 준비
    1,2.3-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
    검증        
}
 
 
 	

 

 

댓글을 작성해보세요.

채널톡 아이콘