워밍업 클럽 2기 BE 클린코드&테스트 day18 과제
22일 전
강의 : Practical Testing: 실용적인 테스트 가이드
@Mock
객체가 기대하는 행위와 리턴 값을 지정하여 테스트에서 기대하는 동작만 테스트가 가능하다
주로 외부 네트워크를 사용하는 객체에 사용하면 좋다
@MockBean
스프링 컨테이너에서 사용하기 위한 @Mock 객체
@Spy
일부는 Mock 객체처럼 동작만 그 이외에는 실제 객체처럼 동작한다
내가 지정한 동작을 기대하는 행위, 반환에 대한 mocking 할 수 있다
실제로 많이 쓰이지는 않는다
@SpyBean
스프링 컨테이너에서 사용하기 위한 @Spy 객체
@InjectMocks
Mock, MockBean 객체를 주입 받는 대상 객체에 사용된다
ex) OrderService에 UserService, ProductService 주입이 필요한 경우
@MockBean private UserService userService; @MockBean private ProductService productService @InjectMocks private OrderService orderService;
각 항목을 @BeforeEach, given절, when절에 배치한다면 어떻게 배치할지?
@BeforeEach void setUp() { 사용자 생성에 필요한 내용 준비 게시물 생성에 필요한 내용 준비 댓글 생성에 필요한 내용 준비 } @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-4. 사용자2 생성 3-6. 사용자1의 게시물 생성 3-8. 사용자1의 댓글 생성 // when 3-9. 사용자2가 사용자1의 댓글 수정 시도 // then 검증 }
댓글을 작성해보세요.