워밍업 클럽 4기 백엔드 - [Day 18 미션]
2개월 전
미션 내용
1. @Mock, @MockBean, @Spy, @SpyBean, @InjectMocks 의 차이를 한번 정리해 봅시다.
@Mock
Spring Context와 무관
실제 객체 대신 가짜(mock) 객체 생성
@Spy
일부는 실제 객체처럼 , 일부는 Stubbing이 가능
@InjectMocks
테스트 대상 객체에 필요한 Mock들을 자동 주입
@MockBean
Spring Context에 등록된 기존 Bean을 Mock으로 교체
전체 애플리케이션 컨텍스트가 필요한 통합 테스트에서 주로 사용
@SpyBean
Spring Context에 등록된 기존 Bean을 Spy로 교체
아래 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: 실용적인 테스트 가이드
댓글을 작성해보세요.