![[워밍업 클럽 4기 - 백엔드] Day 18 미션](https://cdn.inflearn.com/public/files/blogs/ea508f61-695e-4b15-86f4-dc10e7294a21/image (7).png)
[워밍업 클럽 4기 - 백엔드] Day 18 미션
미션
@Mock, @MockBean, @Spy, @SpyBean, @InjectMocks 정리
@Mock
순수 자바 환경의 테스트 단위에서도 사용할 수 있다.
가짜 객체를 생성한다. 실제 로직은 없다.
행위에 대한 기대를 명세하고 그에 따라 동작하도록 한다.
보통 테스트 대상 클래스의 의존 객체를 대체할 때 사용한다.
@MockBean
스프링 부트 환경 같이 Bean을 사용하는 통합 테스트에서 사용할 수 있다.
스프링의 올라가있는 실제 Bean을 Mock 객체로 교환한다.
@Spy
순수 자바 환경의 테스트 단위에서도 사용할 수 있다.
stub이면서 호출된 내용을 기록하여 보여줄 수 있는 객체다.
일부는 실제 객체처럼 동작시키고, 다른 일부만 stubbing할 수 있다. 즉, 선택적 구현과 mocking을 섞어 사용할 수 있다.
@SpyBean
스프링 부트 환경 같이 Bean을 사용하는 통합 테스트에서 사용할 수 있다.
기존 Bean을 Spy 객체로 감싸 실제 로직을 유지하면서 특정 메서드만 moking 한다.
@InjectionMock
순수 자바 환경의 테스트 단위에서도 사용할 수 있다.
mock 객체를 자동으로 주입해준다.
테스트 대상 객체에 mock된 의존성 객체들을 자동으로 주입한다. 즉, 스프링의 도움을 받지 않고 의존성을 주입할 때 사용한다.
테스트 코드 리팩토링
@BeforeEach
void setUp() {
1-1. 댓글 레포지토리.deleteAllInBatch();
1-2. 게시글 레포지토리.deleteAllInBatch();
1-3. 사용자 레포지토리.delteAllInBatch();
}
@DisplayName("사용자가 댓글을 작성할 수 있다.")
@Test
void writeComment() {
// given
1-1. 사용자 생성 - createUser() 호출
1-2. 게시물 생성 - createPost() 호출
// when
1-3. 댓글 생성 - createReply() 호출
// then
검증
}
@DisplayName("사용자가 댓글을 수정할 수 있다.")
@Test
void updateComment() {
// given
2-1. 사용자 생성 - createUser() 호출
2-2. 게시물 생성 - createPost() 호출
2-3. 댓글 생성 - createReply() 호출
// when
2-4. 댓글 수정
// then
검증
}
@DisplayName("자신이 작성한 댓글이 아니면 수정할 수 없다.")
@Test
void cannotUpdateCommentWhenUserIsNotWriter() {
// given
3-1. 사용자1 생성 - createUser() 호출
3-2. 게시물1 생성 - createPost() 호출
3-3. 댓글1 생성 - createReply() 호출
3-4. 사용자2 생성 - createUser() 호출
// when
3-5. 사용자2가 사용자1의 댓글 수정 시도
// then
검증
}
private User createUser() {
1-1. 사용자 생성에 필요한 내용 준비
1-2. 사용자 생성
}
private Post createPost() {
1-1. 게시물 생성에 필요한 내용 준비
1-2. 게시물 생성
}
private Reply createReply() {
1-1. 댓글 생성에 필요한 내용 준비
1-2. 댓글 생성
}
한마디
강의에서 배웠던 내용을 잘 적용해볼 수 있었던 미션같아서 한 번 더 정리하는 느낌이라 좋았다. 마지막 미션까지 달릴 수 있어서 뿌듯함 100배
출처
댓글을 작성해보세요.