블로그

박준형

[워밍업 클럽 4기 백엔드] Day 18 미션

1. Mock 관련 어노테이션 정리하기📌@MockMockito에서 제공하는 어노테이션실제 객체를 생성하지 않고, 가짜 객체를 생성하여 해당 객체의 행위에 대한 반환값 조작 및 메서드 호출을 확인할 수 있다.만약 메서드를 stubbing 하지 않으면 기본값이 반환된다.(String : "", int : 0)단위 테스트를 수행할 때 적합하다.객체 생성 비용이 많이 발생하거나, 기능 수행 비용이 많이 발생하는 경우(외부 API 호출, 메일 전송 등)에 사용하면 테스트의 효용성을 높일 수 있다.📌@MockitoBeanSpring Boot가 제공해주던 @MockBean 이 deprecated되고, Spring 프레임워크에서 기능이 같은 @MockitoBean 을 제공해준다.Spring Context에 가짜 객체를 등록한다.@SpringBootTest 와 같이 사용되어야 한다.Spring DI 로 의존성을 주입해준다.통합 테스트를 수행할 때 적합하다.@Mock 과 기능은 동일하다.📌@SpyMockito에서 제공하는 어노테이션실제 객체를 감싸서 Spy 객체를 만든다.stubbing 하지 않은 메서드는 실제 객체의 메서드의 기능이 작동된다.특정 기능의 반환값을 조작하고 싶다면 stubbing을 꼭 해줘야 한다.일부 동작만 stubbing하고, 나머지는 실제 동작을 테스트하고 싶을 때 유용하다.단위 테스트를 수행할 때 적합하다.📌 @MockitoSpyBeanSpring Boot가 제공해주던 @SpyBean 이 deprecated되고, Spring 프레임워크에서 기능이 같은 @MockitoSpyBean 을 제공해준다.Spring Context에 등록된 기존 빈을 감싸서 Spy 객체로 만든다.@SpringBootTest 와 같이 사용되어야 한다.Spring DI 로 의존성을 주입해준다.통합 테스트를 수행할 때 적합하다.@Spy 와 기능은 동일하다.📌 @InjectMocksMockito에서 제공하는 어노테이션테스트 할 대상 객체를 생성하고, 이 객체에 필요한 의존성 (@Mock 과 @Spy 로 생성된 객체)을 자동으로 주입해준다.2. 각 항목을 적절한 위치에 배치하기@BeforeEach void setUp() { 1-1, 2-1, 3-1. 사용자 생성에 필요한 내용 준비 1-3, 2-3, 3-5. 게시물 생성에 필요한 내용 준비 1-2, 2-2, 3-2. 사용자 생성 1-4, 2-4, 3-6. 게시물 생성 } @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 // then 3-9. 사용자2가 사용자1의 댓글 수정 시도 검증 }💡고려 사항댓글 관련 기능을 테스트하므로 이와 관련 없는 사용자, 게시물 생성을 테스트 코드에서 분리하고, 독립성에도 문제가 없기 때문에 공유 변수로 설정댓글은 테스트의 주체이므로 각 메서드 내부에서 생성하여 테스트 간 독립성을 보장cannotUpdateCommentWhenUserIsNotWriter() 사용자2 데이터는 해당 메서드에서만 사용하기 때문에 분리할 필요가 없다고 판단 사용자1과 다른 사용자2가 있다는 것을 명시적으로 테스트 코드에 보여주어야 무엇을 테스트 하는지 이해를 도울 수 있다고 판단3-9는 예외를 검증하는 코드이므로 assertThatThrownBy() 을 사용할 것으로 생각되어 when, then 절에 배치 출처 : Practical Testing: 실용적인 테스트 가이드

백엔드워밍업클럽4기백엔드Day18미션

채널톡 아이콘