워밍업 클럽 4기 - Day 16 미션: Layered Architecture Testig

Controller Layer

특징

  • 클라이언트와 통신을 담당하는 계층입니다.

     

테스트 방법

  • @WebMvcTest를 사용하여 Controller Bean만 등록한 뒤 테스트 합니다.(Service Layer 부터는 mock을 사용합니다.)

     

  • Request Body의 값이 유효한지를 체크합니다.

 

Service Layer

특징

  • 핵심 비즈니스 로직을 수행하는 계층입니다.

테스트 방법

  • 핵심 로직을 테스트 하는 것이기에, 실제 환경과 비슷한 환경에서 기능이 동작함을 확인하는 게 좋습니다.

     

    • @SpringBootTest 어노테이션을 사용하여 실제 Spring Context를 띄우고 테스트합니다.

    • mock 객체의 사용을 최대한 자제합니다. 외부와 통신하는 경우(DB 제외)에 mock 객체를 사용하여 동작을 mocking합니다.

  • DB에서 값을 읽거나 저장하지 않는 경우, @SpringBootTest를 사용하지 않고 객체를 직접 만들어서 사용해도 좋습니다.(예: 할인 정책에 따라 음료의 종류와 갯수를 입력받아서 주문 금액을 계산하는 로직)

  • DB에 값을 입력하고 출력하는 로직이 들어가는 경우가 많습니다. DB에 이전 테스트에서 입력한 값이 남아있으면 다음 테스트에 영향을 줄 가능성이 높습니다. 따라서 테스트의 독립성을 보장하기 위해 각 테스트가 끝난 후 DB 값을 비우는 작업이 필요합니다.(@Transactional어노테이션을 사용하거나, 직업 DB를 비우는 작업을 함으로 DB를 비울 수 있습니다.)

 

Repository Layer

특징

  • 서버와 DB 사이의 통신을 담당하는 계층입니다.

     

    테스트 방법

  • Jpa를 사용하는 경우 @DataJpaTest를 사용하여 Repository Layer 빈만 등록하여 테스트할 수 있습니다.

  • 레포지토리가 JdbcTemplate만 사용해서 구현한 경우 @JdbcTest를 적용하여 테스트할 수 있습니다.

댓글을 작성해보세요.

채널톡 아이콘