[워밍업 클럽 3기 BE code] 미션 day 18

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

- @Mock과 @Spy: 단위 테스트에서 특정 클래스를 대역으로 만듦니다.

- @InjectMocks: 단위 테스트에서 @Mock 혹은 @Spy로 선언한 객체를 자동으로 주입합니다.

- @MockBean, @SpyBean: 통합 테스트에서 해당 빈을 대신합니다.

- @Mock과 @MockBean은 정의하지 않은 메서드에 아무 일도 하지 않지만, @Spy과 @SpyBean은 실제 객체를 감싸며 정의하지 않은 메서드는 원래 객체와 동일한 로직을 수행합니다.

 

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

@BeforeEach 

void setUp() {

    댓글 전체 삭제

    게시물 전체 삭제

    사용자 전체 삭제

} 

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

@Test

void writeComment() {    

    // given

    1-1 ~ 1-2. '사용자_생성'으로 엔티티 생성 및 리포지토리에 저장

    1-3 ~ 1-4. '게시글_생성'으로 엔티티 생성 및 리포지토리에 저장

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

    // when    

    1-6. 댓글 생성

    // then

    검증

}

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

@Test

void updateComment() {

    // given

    2-1 ~ 2-2. '사용자_생성'으로 엔티티 생성 및 리포지토리에 저장

    2-3 ~ 2-4. '게시글_생성'으로 엔티티 생성 및 리포지토리에 저장

    2-5 ~ 2.6. 댓글 생성 및 리포지토리에 저장

    2-7-1. 댓글 수정 준비 + '2-5 ~ 2-6'에서 생성한 PK 활용하기

    // when

    2-7-2. 댓글 수정

    // then

    검증

}

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

@Test

void cannotUpdateCommentWhenUserIsNotWriter() {

    // given

    3-1 ~ 3-2. '사용자_생성'으로 사용자 1의 엔티티 생성 및 리포지토리에 저장

    3-3 ~ 3-4. '사용자_생성'으로 사용자 2의 엔티티 생성 및 리포지토리에 저장

    3-5 ~ 3-6. '게시글_생성'으로 사용자 1의 게시글의 엔티티 생성 및 리포지토리에 저장

    3-7 ~ 3.8. 사용자 1의 게시글에 대한 댓글 생성 및 리포지토리에 저장

    // when

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

    // then

    검증        

}

private 사용자 사용자_생성(유니크한_사용자명){}

private 게시글 게시글_생성(사용자명, 게시글제목, 게시글내용){}

댓글을 작성해보세요.

채널톡 아이콘