[워밍업 클럽 4기 백엔드] 3주차 발자국
학습 내용
persistence layer 테스트
persistence layer
data access 의 역할
비즈니스 가공 로직이 포함되어서는 안된다. 데이터에 대한 CRUD에만 집중한 레이어
미래에 어떠한 변경이 될수도 있고 내가 작성한 코드를 확인하기 위해 테스트를 해야한다
Repository test
통합 테스트이지만 해당 레이어만 띄워서 하기 때문에 단위 테스트 느낌이 난다
스프링 통합테스트를 위한 어노테이션
@springBootTest, @DataJpaTest차이
dataJpaTest : jpa 관련 빈 주입해서 서버를 띄워 빠르다
assertThat(product).hasSize(2) - 사이즈 확인
.extrating("productNumber", "name" , "sellingStatus") - 검증하고 싶은 셀만 확인 가능
.containsExactlyInAnyOrder( -- 순서 상관없이 해당 것이 포함하는지 확인
tuple("001", "아메리카노", selling),
tuple("002", "카페라떼", HOLD)
)
business layer 테스트
비즈니스 로직을 구현하는 역할
Persistence Layer와의 상호작용을 통해 비즈니스 로직을 전개시킨다
트랜잭션을 보장해야 한다
service 테스트
asserThat(orderResponse.getId).isNotNull(); -- null 이 아니다
@springBootTest, @DataJpaTest차이
DataJpaTest 는 트랜잭션 어노테이션 있어 사용하면 자동으로 롤백이 된다
presentation layer 테스트
presentation layer
외부 세계의 요청을 가장 먼저 받는 계층
파라미터에 대한 최소한의 검증을 수행한다
persenation layer 테스트시 해당 부분은 단위테스트 하는 느낌으로 하고 나머지 layer는 mocking 처리를 하여 테스트를 한다
@transactional(readOnly = true)
CRUD에서 CUD 동작 X, only read 만 가능
jpa : cud 스냅샷 저장, 변경 감지 x (성능 향상)
서비스 테스트를 할때 전체 클래스에 @transactional(readOnly = true) 를 걸고 각 command 작업을 하는 메서드에는 @transactional 따로 걸자
느낀점
실제 단위 테스트 하면서 어떤 것을 테스트를 해야할지 모르겠다는 느낌을 받았지만 강의를 들으면서 이러한 주제로 나눠서 테스트 해야겠다고 생각을 해볼수 있는 기회가 된거 같다
댓글을 작성해보세요.