inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

워밍업 클럽 3기 Code 과정 Day 18 미션

최준
0

1. @Mock, @MockBean, @Spy, @SpyBean, @InjectMocks 차이

 

@Mock

 

@MockBean

 

@Spy

 

@SpyBean

 

@InjectionMocks

 

2. 테스트 항목 @BeforeEach, given절, when절에 배치

"@BeforeEach 
void setUp() {
    0-1. 사용자 생성에 필요한 내용 준비
    0-2. 사용자 생성
    0-3. 게시물 생성에 필요한 내용 준비
    0-4. 게시물 생성
} 

@DisplayName(""사용자가 댓글을 작성할 수 있다."")
@Test
void writeComment() {
    // given
    1-1. 댓글 생성에 필요한 내용 준비

    // when
    1-2. 댓글 생성

    // then
    검증
}

@DisplayName(""사용자가 댓글을 수정할 수 있다."")
@Test
void updateComment() {
    // given
    2-1. 댓글 생성에 필요한 내용 준비
    2-2. 댓글 생성

    // when
    2-3. 댓글 수정

    // then
    검증
}

@DisplayName(""자신이 작성한 댓글이 아니면 수정할 수 없다."")
@Test
void cannotUpdateCommentWhenUserIsNotWriter() {
    // given
    3-1. 사용자2 생성에 필요한 내용 준비
    3-2. 사용자2 생성
    3-3. 사용자1의 댓글 생성에 필요한 내용 준비
    3-4. 사용자1의 댓글 생성

    // when
    3-5. 사용자2가 사용자1의 댓글 수정 시도

    // then
    검증        
}"

 

Why?

각 테스트에서 검증하려는 것이 무엇인지 고민해봤다.

1번 테스트는 댓글 작성 가능 여부

2번 테스트는 댓글 수정 가능 여부

3번 테스트는 자신 외의 다른 사람이 댓글 수정 불가능 여부

 

그렇다면 검증하려는 것이 when에 들어가야 한다고 생각했다.

그리고 이에 필요한 것들을 given에 넣었다.

 

그런데 사용자 생성과 게시물 생성은 각 테스트의 given에 공통적이라고 생각해 @BeforeEach로 넣었다.

given에도 각 테스트에 필요한 것들만 준비하는 것이 좋다고 생각했다.

 

답변 0