인프런 워밍업 스터디 클럽 3기 백엔드 Day 18미션
24일 전
1. @Mock, @MockBean, @Spy, @SpyBean, @InjectMocks 의 차이를 한번 정리해 봅시다.
@Mock 기본적인 목(mock) 객체를 생성하고, 가짜 객체로 특정 메서드의 동작을 지정할 수 있다. 단위 테스트에서 실제 로직 대신 더미 데이터를 반환하는 데 사용한다.
@MockBean Spring 컨텍스트 내에 목 객체를 빈으로 등록한다. 애플리케이션의 특정 빈을 대체하여 통합 테스트를 진행할 수 있다.
@Spy 실제 객체를 생성하면서 일부 메서드만 모킹할 수 있다. 객체의 전체 동작을 유지하면서 특정 부분만 스텁으로 대체할 수 있다.
@SpyBean Spring 컨텍스트에서 실제 빈을 스파이로 등록한다. 특정 Spring 빈의 일부 메서드를 테스트용으로 대체할 수 있다.
@InjectMocks 테스트 대상 클래스의 인스턴스를 생성하고, 의존 객체들을 자동으로 주입한다. 외부 의존성 없이 독립적인 테스트를 가능하게 한다.
2. 아래 3개의 테스트가 있습니다. 내용을 살펴보고, 각 항목을 @BeforeEach, given절, when절에 배치한다면 어떻게 배치하고 싶으신가요? (@BeforeEach에 올라간 내용은 공통 항목으로 합칠 수 있습니다. ex. 1-1과 2-1을 하나로 합쳐서 @BeforeEach에 배치)
@BeforeEach
void setUp() {
// 사용자 생성에 필요한 내용 준비
// 사용자 생성
// 게시물 생성에 필요한 내용 준비
// 게시물 생성
}
@DisplayName("사용자가 댓글을 작성할 수 있다.")
@Test
void writeComment() {
// given
// 댓글 생성에 필요한 내용 준비
// when
// 댓글 생성
// then
// 댓글이 정상적으로 작성되었는지 검증
}
@DisplayName("사용자가 댓글을 수정할 수 있다.")
@Test
void updateComment() {
// given
// 댓글 생성에 필요한 내용 준비
// 댓글 생성
// 댓글 수정에 필요한 내용 준비
// when
// 댓글 수정
// then
// 댓글이 정상적으로 수정되었는지 검증
}
@DisplayName("자신이 작성한 댓글이 아니면 수정할 수 없다.")
@Test
void cannotUpdateCommentWhenUserIsNotWriter() {
// given
// 사용자1 생성
// 사용자2 생성
// 사용자1의 게시물 생성
// 사용자1의 댓글 생성
// 사용자2가 댓글 수정 시도에 필요한 내용 준비
// when
// 사용자2가 댓글 수정 시도
// then
// 댓글 수정이 실패했는지 검증
}
댓글을 작성해보세요.