워밍업 클럽 2기 BE 클린코드&테스트 day18 과제

워밍업 클럽 2기 BE 클린코드&테스트 day18 과제

강의 : 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
        검증
    }

댓글을 작성해보세요.

채널톡 아이콘