320x100
320x100
Q-1. @Mock, @MockBean, @Spy, @SpyBean, @InjectMocks 의 차이를 한번 정리해 봅시다.
Annotation | Package | Target | Action |
Mock | org.mockito | Object(PlainOldJavaObject, Java Bean) | Mocking - 가짜 객체 |
MockBean | org.springframework.boot | Spring Bean(ApplicationContext) | Mocking - 가짜 스프링 빈 |
Spy | org.mockito | Object(PlainOldJavaObject, Java Bean) | Real - 실제 객체(부분 모킹) |
SpyBean | org.springframework.boot | Spring Bean(ApplicationContext) | Real - 실제 빈(부분 모킹) |
InjectMocks | org.mockito | @Mock or @Spy Object | Mock/Spy DI |
Q-2. 아래 3개의 테스트가 있습니다. 내용을 살펴보고, 각 항목을 @BeforeEach, given절, when절에 배치한다면 어떻게 배치하고 싶으신가요? (@BeforeEach에 올라간 내용은 공통 항목으로 합칠 수 있습니다. ex. 1-1과 2-1을 하나로 합쳐서 @BeforeEach에 배치)
✔️ 게시판 게시물에 달리는 댓글을 담당하는 Service Test
✔️ 댓글을 달기 위해서는 게시물과 사용자가 필요하다.
✔️ 게시물을 올리기 위해서는 사용자가 필요하다.
체크리스트에서 확인할 수 있는 것처럼 먼저 이 테스트의 주된 관심사는 댓글(Comment)이라고 생각했다
댓글이 작성되기 위해서는 사용자, 게시물이 필요하다
또한 이 테스트에서 변하지 않는 부분과 변하는 부분을 나눠봤다(영원한 불변은 없지만, 이 테스트 한정)
변하지 않는 부분: 사용자A 생성 -> 사용자A 게시물 생성
변하는 부분: 사용자B 추가
그럼 이제 정리됐다
package com.boki.cafekiosk.boki;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;
public class CommentServiceTest {
@BeforeEach
void setUp() {
1-1. 사용자A 생성에 필요한 내용 준비
1-2. 사용자 생성
1-3. 게시물A 생성에 필요한 내용 준비
1-4. 게시물 생성
2-1. 사용자A 생성에 필요한 내용 준비
2-2. 사용자 생성
2-3. 게시물A 생성에 필요한 내용 준비
2-4. 게시물 생성
3-1. 사용자A 생성에 필요한 내용 준비
3-2. 사용자A 생성
3-5. 사용자A의 게시물 생성에 필요한 내용 준비
3-6. 사용자A의 게시물 생성
}
@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. 사용자B 생성에 필요한 내용 준비
3-4. 사용자B 생성
3-7. 사용자A의 댓글 생성에 필요한 내용 준비
3-8. 사용자A의 댓글 생성
// when
3-9. 사용자B가 사용자1의 댓글 수정 시도
// then
검증
}
}
아마 요정도로 할 것 같고.. 회사 팀 내 컨벤션에 따라 사용자A를 생성하고, 사용자A가 게시글을 생성하는 부분까지 각 테스트의 // given절로 내릴 수 있을 것 같다
추가로 3번째에 Authorization(권한)을 검사하는 부분에 있어서는 사용자B의 변수명을 other라고 해서 명확하게 다른 사람이 조작하는 것을 나타낼 것 같다
320x100
'Course > 인프런 워밍업 클럽 스터디' 카테고리의 다른 글
4주차 회고 발자국 🐾 (11) | 2024.10.27 |
---|---|
3주차 회고 발자국 🐾 (0) | 2024.10.23 |
Mission - Day 15 (1) | 2024.10.22 |
댓글