워밍업 클럽 2기 백엔드 클린코드&테스트 Day 18 미션
27일 전
1. @Mock, @MockBean, @Spy, @SpyBean, @InjectMocks 의 차이
@Mock, @Spy 차이
- '가짜'이냐 '진짜'이냐의 차이
-
@Spy
' 진짜' 객체라면, 객체 내부의 메서드가 실행된다.-
@Mock
'가짜' 객체라면, 객체 내부의 메서드가 실행되지 않는다.
@Mock과 @MockBean 차이
@Mock
은 Spring과 독립적으로, 단위 테스트에서 객체의 특정 메서드를 모킹할 때 사용!
@MockBean
은 Spring Boot 통합 테스트나 Spring의 의존성 주입이 필요한 상황에서 사용되며, Spring 컨텍스트에 Mock 객체를 주입하여 해당 객체를 사용!
@Spy
: Mockito 스파이 객체를 테스트 클래스 내부에서만 사용하며, Spring 컨텍스트와는 무관합니다. 단위 테스트에서 사용됩니다.
@SpyBean
: Spring 애플리케이션 컨텍스트에 스파이 객체를 주입하여 Spring의 Bean과 상호작용할 수 있게 합니다. Spring 통합 테스트에서 사용됩니다.
@InjectMocks
@Mock 객체에 필요한 의존성을 주입해주는 역할을 수행한다.
2. 테스트 코드 문서화
핵심은 중복 제거가 아닌,
도메인
사용자, 게시물은 간접적이므로 setUp, 댓글은 직접적으로 given절
@BeforeEach
void setUp() {
1,2,3-1. 사용자 생성에 필요한 내용 준비
1,2,3-2. 사용자 생성
1,2,3-3. 게시물 생성에 필요한 내용 준비
1,2.3-4. 게시물 생성
}
@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
검증
}
댓글을 작성해보세요.