
워밍업 클럽 3기 Code 과정 Day 18 미션
1. @Mock, @MockBean, @Spy, @SpyBean, @InjectMocks 차이점
@Mock, @Spy
Spring Context가 없이도 동작가능
Mock은 가짜 객체를 만드는 반면 Spy는 진짜 객체를 감싸서 만듬.
Mock은 동작을 지정하지 않으면 기본값을 반환
Spy는 동작을 지정하지 않으면 실제 객체의 동작을 유지
@MockBean, @SpyBean
Spring Context 에서 주입을 해줌
기본적인 Mock, Spy 처럼 동작을 함.
@InjectMocks
기본적인 Mock 객체들을 테스트 주입(Mock, Spy)
2. 테스트 항목 @BeforeEach, given절, when절에 배치
@BeforeEach
void setUp() {
0-1. 사용자1 생성에 필요한 내용 준비
0-2. 사용자2 생성
0-3. 사용자1 게시물 생성에 필요한 내용 준비
0-4. 사용자1 게시물 생성
0-5. 사용자2 생성에 필요한 내용 준비
0-6. 사용자2 생성
}
@DisplayName("사용자가 댓글을 작성할 수 있다.")
@Test
void writeComment() {
// given
1-1. 사용자1의 댓글 생성에 필요한 내용 준비
// when
1-2. 사용자1의 댓글 생성
// then
검증
}
@DisplayName("자신이 작성한 댓글이 아니면 수정할 수 없다.")
@Test
void cannotUpdateCommentWhenUserIsNotWriter() {
// given
2-1. 사용자1의 댓글 생성에 필요한 내용 준비
2-2. 사용자1의 댓글 생성
// when
2-3. 사용자2가 사용자1의 댓글 수정 시도
// then
검증
}
@DisplayName("사용자가 댓글을 수정할 수 있다.")
@Test
void updateComment() {
// given
3-1. 사용자1 댓글 생성에 필요한 내용 준비
3-2. 사용자1 댓글 생성
// when
3-3. 댓글 수정
// then
검증
}
결론
적어도 하나의 게시물과 사용자는 생성을 한후 해당 테스트를 처리 한다.
테스트를 위해 각 테스트마다 중복된 사용자를 만들기 보다 미리 선언 후 이용하는 것이 낫다고 판단.
중복된 코드도 회피를 할수 있다.
댓글을 작성해보세요.