inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

네번째 발자국 👣

nnahye
0

Presentation Layer 테스트

@Mock, @Spy, @InjectMocks

@Mock : Mock(가짜) 객체로 만든다

@InjectMocks : Mock 객체를 주입해준다

@Spy : 기능들중 일부만 Mock으로 만든다.

더 나은 테스트를 작성하기 위한 구체적 조언

학습테스트

: 테스트를 하면서 학습하기

Spring REST Docs

: 테스트 코드를 통한 API 문서 자동화 도구

 

미션

게시판 게시물에 달리는 댓글을 담당하는 Service Test

댓글을 달기 위해서는 게시물과 사용자가 필요하다.

게시물을 올리기 위해서는 사용자가 필요하다.

 

👇 처음 내가 작성했던 코드

@BeforeEach 
void setUp() {
1-1. 사용자 생성에 필요한 내용 준비
1-3. 게시물 생성에 필요한 내용 준비
1-5. 댓글 생성에 필요한 내용 준비
}

@DisplayName("사용자가 댓글을 작성할 수 있다.")
@Test
void writeComment() {
// given 
1-2. 사용자 생성
1-4. 게시물 생성

// when 
1-6. 댓글 생성

// then
검증
}
@DisplayName("사용자가 댓글을 수정할 수 있다.")
@Test
void updateComment() {
// given
2-2. 사용자 생성
2-4. 게시물 생성
2-6. 댓글 생성

// when
2-7. 댓글 수정

// then
검증
}
@DisplayName("자신이 작성한 댓글이 아니면 수정할 수 없다.")
@Test
void cannotUpdateCommentWhenUserIsNotWriter() {
//given 
3-2. 사용자1 생성
3-6. 사용자2 생성
3-6. 사용자1 게시물 생성 
3-8. 사용자1의 댓글 생성

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

// then
검증 
}

👇 수정 한 코드  

@BeforeEach 
void setUp() {
1-1. 사용자 생성에 필요한 내용 준비
1-2. 사용자 생성
1-3. 게시물 생성에 필요한 내용 준비
1-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
검증 
} 

 미션 회고

처음엔 setUp()에 생성에 필요한 내용들만 배치해야한다고 생각하고 저렇게 코드를 작성했는데,

댓글 도메인에 대한 테스트라는 것에 중점을 둬야한다는 공통 피드백을 듣고 다시 수정했다. 앞으로 항상 도메인을 중심으로 생각하는 습관을 들여야겠다.


넷째주 회고

벌써 4주가 지났다니 시간이 너무 빠르다. 그동안 많은 것들을 배웠는데, 처음 리팩토링 하는것부터 테스트하는것까지 다시한번 쭉 훑어봐야겠다. 개인적으로 새로 알게된 것이 많은데, 그 중에서 코드를 보는 관점을 많이 배운것 같다. 배웠던 것들을 내것으로 완전히 만들기까지 많은 시간이 걸리겠지만, 꼭 복습을 해서 스스로 적용할 수 있도록 해야겠다. 두 강의를 들으면서 스스로 더 공부를 해보고싶다는 자극을 많이 받았다. 의미있는 시간이었다.

답변 0