워밍업 클럽 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를 적용하여 테스트할 수 있습니다.
댓글을 작성해보세요.