![워밍업 클럽 4기 백엔드 - [Day 16 미션]](https://cdn.inflearn.com/public/files/blogs/851ee861-1198-4b94-a399-f2c798487f62/인프런워밍업클럽백엔드4.png)
워밍업 클럽 4기 백엔드 - [Day 16 미션]
워밍업 클럽 4기 백엔드 - [Day 16 미션]
미션 내용
Layered Architecture 구조의 레이어별 테스트 작성법을 알아보았습니다. 레이어별로
1) 어떤 특징이 있고, 2) 어떻게 테스트를 하면 좋을지, 자기만의 언어로 다시 한번 정리해 볼까요?
Layered Architecture
관심사의 분리로 각 레이어를 독립적으로 테스트할 수 있다.
Persistence Layer
데이터베이스 및 외부 저장소와의 상호작용하는 레이어
1) 특징
Data access의 역할만 해야한다. (데이터 가공 로직 X)
Data의 CRUD에만 집중한 레이어.
2) 테스트 방법데이터 Access에 대한 테스트를 진행한다. (데이터 저장 및 조회 기능, 데이터 무결성)
layer를 떼어서 테스트 하기 때문에 단위테스트 느낌이기 때문에 @DataJpaTest(@Transactional 이미 포함)를 사용해 좀더 쉽게 수행할 수 있지만, Spring을 통해 서버를 띄워서 하는 테스트 이기 때문에
통합 테스트 성격의 @SpringBootTest와 @Transactional를 조합해서 작성한다.
Business Layer
비지니스 로직 및 도메인 로직에 대한 책임이 있는 레이어
1) 특징
도메인 모델을 조작하고 검증하는 역할.
Persistence Layer와의 상호작용을 통해 전개 (통합적 테스트)
트랜잭션을 보장해야 한다.
2) 테스트 방법
비지니스 로직 검증을 위해, 보이지 않는 예외 케이스를 고려한 테스트를 해야함.
Persistence Layer 를 포함해 통합 테스트 한다.
데이터 클렌징 시, 객체간의 협력이 많은 Business Layer에서는 @AfterEach에서 deleteAllInBatch() 사용.
deleteAll은 조회 후 하나씩 삭제하므로, 쿼리가 다수 발생함.
Presentation Layer
UI 및 컨트롤러의 책임
1) 특징
외부 세계의 요청을 가장 먼저 받는 계층이면서 응답을 반환하는 곳.
비지니스 로직을 포함하지 않고, Business Layer에 위임함.
요청 데이터에 대한 검증을 수행하는 곳으로 Controller와 DTO를 포함.
2) 테스트 방법
요청 파라미터에 대한 최소한의 검증을 수행한다. (ex 파라미터의 필수값 여부)
Controller는 하위레이어 (Business Layer, Persistence Layer)를 Mocking해 독립적으로 테스트 한다.
@WebMvcTest를 이용해 테스트 하고자 하는 Controller를 등록한다.
Business Layer의 Service 클래스를 @MockBean을 통해 Mocking한다.
*Mocking은 스프링에서 제공하는 아래 프레임워크를 사용한다.
MockMvcMock(가짜) 객체를 사용해 스프링 MVC 동작을 재현할 수 있는 테스트 프레임워크
댓글을 작성해보세요.