🎁[속보] 인프런 내 깜짝 선물 출현 중🎁

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

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

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

 

@Mock, @Spy

  • Spring Context가 없이도 동작가능

  • Mock은 가짜 객체를 만드는 반면 Spy는 진짜 객체를 감싸서 만듬.

  • Mock은 동작을 지정하지 않으면 기본값을 반환

  • Spy는 동작을 지정하지 않으면 실제 객체의 동작을 유지

 

@MockBean, @SpyBean

  • Spring Context 에서 주입을 해줌

  • 기본적인 Mock, Spy 처럼 동작을 함.

 

@InjectMocks

  • 기본적인 Mock 객체들을 테스트 주입(Mock, Spy)

 

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

@BeforeEach

void setUp() {

0-1. 사용자1 생성에 필요한 내용 준비

0-2. 사용자2 생성

0-3. 사용자1 게시물 생성에 필요한 내용 준비

0-4. 사용자1 게시물 생성

0-5. 사용자2 생성에 필요한 내용 준비

0-6. 사용자2 생성

}

 

@DisplayName("사용자가 댓글을 작성할 수 있다.")

@Test

void writeComment() {

// given

1-1. 사용자1의 댓글 생성에 필요한 내용 준비

// when

1-2. 사용자1의 댓글 생성

// then

검증

}

 

@DisplayName("자신이 작성한 댓글이 아니면 수정할 수 없다.")

@Test

void cannotUpdateCommentWhenUserIsNotWriter() {

// given

2-1. 사용자1의 댓글 생성에 필요한 내용 준비

2-2. 사용자1의 댓글 생성

// when

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

// then

검증

}

@DisplayName("사용자가 댓글을 수정할 수 있다.")

@Test

void updateComment() {

// given

3-1. 사용자1 댓글 생성에 필요한 내용 준비

3-2. 사용자1 댓글 생성

// when

3-3. 댓글 수정

// then

검증

}

 

결론

  • 적어도 하나의 게시물과 사용자는 생성을 한후 해당 테스트를 처리 한다.

  • 테스트를 위해 각 테스트마다 중복된 사용자를 만들기 보다 미리 선언 후 이용하는 것이 낫다고 판단.

  • 중복된 코드도 회피를 할수 있다.

댓글을 작성해보세요.


채널톡 아이콘