
워밍업 클럽 3기 BE 클린코드&테스트 DAY-18 미션
26일 전
1. @Mock, @MockBean, @Spy, @SpyBean, @InjectMocks 의 차이
Mock
Spring Context 없이 순수하게 Mock 객체를 만들어서 사용
InjectMocks
Mock은 Spring Context에서 관리해주지 않기 때문에 해당 Mock객체가 필요한 객체에 선언하여 Mock객체를 주입
MockBean
Spring Context 에서 관리하는 빈 대신 사용하기 위해 사용
MockBean을 사용하면 Srping Context에 있는 빈을 대신해서 사용하기 때문에 Spring에서 의존성 주입을 해준다.
Spy
mock은 가짜객체라서 지정한 행동말고는 아무것도 하지 않지만
진짜객체를 기반으로 생성되어 일부 행동에 대해 지정한 값을 반환
Mock이 when과 thenReturn을 지정하지만
Spy는 진짜 객체를 기반으로 행동하기에 doSometing(return)만 지정
실제객체를 기반으로 만들기에 stub과 실제 메소드 혼합해서 테스트 가능
SpyBean
mock과 mockbean같은 관계
2. 아래 3개의 테스트가 있습니다.
내용을 살펴보고, 각 항목을 @BeforeEach, given절, when절에 배치한다면 어떻게 배치하고 싶으신가요?
(@BeforeEach에 올라간 내용은 공통 항목으로 합칠 수 있습니다. ex. 1-1과 2-1을 하나로 합쳐서 @BeforeEach에 배치)
@BeforeEach
void setUp() {
사용자1 생성에 필요한 내용 준비
사용자1 생성
사용자2 생성에 필요한 내용 준비
사용자2 생성
사용자1의 게시물 생성에 필요한 내용 준비
사용자1의 게시물 생성
}
@DisplayName("사용자가 댓글을 작성할 수 있다.")
@Test
void writeComment() {
// given
댓글 생성에 필요한 내용 준비
// when
댓글 생성
// then
검증
}
@DisplayName("사용자가 댓글을 수정할 수 있다.")
@Test
void updateComment() {
// given
댓글 생성에 필요한 내용 준비
댓글 생성
// when
댓글 수정
// then
검증
}
@DisplayName("자신이 작성한 댓글이 아니면 수정할 수 없다.")
@Test
void cannotUpdateCommentWhenUserIsNotWriter() {
// given
사용자1의 댓글 생성에 필요한 내용 준비
사용자1의 댓글 생성
// when
// then
사용자2가 사용자1의 댓글 수정 시도
검증
}
댓글을 작성해보세요.