[워밍업 클럽 3기 BE code] 미션 day 18
6개월 전
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 게시글 게시글_생성(사용자명, 게시글제목, 게시글내용){}
댓글을 작성해보세요.