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

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

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

미션

  1. @Mock, @MockBean, @Spy, @SpyBean, @InjectMocks 정리

  • @Mock

     

    • 순수 자바 환경의 테스트 단위에서도 사용할 수 있다.

    • 가짜 객체를 생성한다. 실제 로직은 없다.

    • 행위에 대한 기대를 명세하고 그에 따라 동작하도록 한다.

    • 보통 테스트 대상 클래스의 의존 객체를 대체할 때 사용한다.

     

  • @MockBean

    • 스프링 부트 환경 같이 Bean을 사용하는 통합 테스트에서 사용할 수 있다.

    • 스프링의 올라가있는 실제 Bean을 Mock 객체로 교환한다.

     

  • @Spy

    • 순수 자바 환경의 테스트 단위에서도 사용할 수 있다.

    • stub이면서 호출된 내용을 기록하여 보여줄 수 있는 객체다.

    • 일부는 실제 객체처럼 동작시키고, 다른 일부만 stubbing할 수 있다. 즉, 선택적 구현과 mocking을 섞어 사용할 수 있다.

     

  • @SpyBean

    • 스프링 부트 환경 같이 Bean을 사용하는 통합 테스트에서 사용할 수 있다.

    • 기존 Bean을 Spy 객체로 감싸 실제 로직을 유지하면서 특정 메서드만 moking 한다.

     

  • @InjectionMock

    • 순수 자바 환경의 테스트 단위에서도 사용할 수 있다.

    • mock 객체를 자동으로 주입해준다.

    • 테스트 대상 객체에 mock된 의존성 객체들을 자동으로 주입한다. 즉, 스프링의 도움을 받지 않고 의존성을 주입할 때 사용한다.

 

  1. 테스트 코드 리팩토링

@BeforeEach 
void setUp() {
    1-1. 댓글 레포지토리.deleteAllInBatch();
    1-2. 게시글 레포지토리.deleteAllInBatch();
    1-3. 사용자 레포지토리.delteAllInBatch();
} 

@DisplayName("사용자가 댓글을 작성할 수 있다.")
@Test
void writeComment() {
    // given
    1-1. 사용자 생성 - createUser() 호출
    1-2. 게시물 생성 - createPost() 호출
  
    // when
    1-3. 댓글 생성 - createReply() 호출

    // then
    검증
}

@DisplayName("사용자가 댓글을 수정할 수 있다.")
@Test
void updateComment() {
    // given
    2-1. 사용자 생성 - createUser() 호출
    2-2. 게시물 생성 - createPost() 호출
    2-3. 댓글 생성 - createReply() 호출
		
    // when
    2-4. 댓글 수정

    // then
    검증
}

@DisplayName("자신이 작성한 댓글이 아니면 수정할 수 없다.")
@Test
void cannotUpdateCommentWhenUserIsNotWriter() {
    // given
    3-1. 사용자1 생성 - createUser() 호출
    3-2. 게시물1 생성 - createPost() 호출
    3-3. 댓글1 생성 - createReply() 호출
		
    3-4. 사용자2 생성 - createUser() 호출

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

    // then
    검증        
}

private User createUser() {
    1-1. 사용자 생성에 필요한 내용 준비
    1-2. 사용자 생성
}

private Post createPost() {
    1-1. 게시물 생성에 필요한 내용 준비
    1-2. 게시물 생성
}

private Reply createReply() {
    1-1. 댓글 생성에 필요한 내용 준비
    1-2. 댓글 생성
}

 

한마디

강의에서 배웠던 내용을 잘 적용해볼 수 있었던 미션같아서 한 번 더 정리하는 느낌이라 좋았다. 마지막 미션까지 달릴 수 있어서 뿌듯함 100배

 

출처

댓글을 작성해보세요.

채널톡 아이콘