[워밍업 클럽 4기 백엔드] 3주차 발자국

image

학습 내용

  1. 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)
	        )

 

  1. business layer 테스트

  • 비즈니스 로직을 구현하는 역할

  • Persistence Layer와의 상호작용을 통해 비즈니스 로직을 전개시킨다

  • 트랜잭션을 보장해야 한다

service 테스트

asserThat(orderResponse.getId).isNotNull();  -- null 이 아니다 

@springBootTest, @DataJpaTest차이

DataJpaTest 는 트랜잭션 어노테이션 있어 사용하면 자동으로 롤백이 된다

 

  1. presentation layer 테스트

     

presentation layer

  • 외부 세계의 요청을 가장 먼저 받는 계층

  • 파라미터에 대한 최소한의 검증을 수행한다

     

  • persenation layer 테스트시 해당 부분은 단위테스트 하는 느낌으로 하고 나머지 layer는 mocking 처리를 하여 테스트를 한다

 

@transactional(readOnly = true)

CRUD에서 CUD 동작 X, only read 만 가능

jpa : cud 스냅샷 저장, 변경 감지 x (성능 향상)

서비스 테스트를 할때 전체 클래스에 @transactional(readOnly = true) 를 걸고 각 command 작업을 하는 메서드에는 @transactional 따로 걸자

 

 

느낀점

  • 실제 단위 테스트 하면서 어떤 것을 테스트를 해야할지 모르겠다는 느낌을 받았지만 강의를 들으면서 이러한 주제로 나눠서 테스트 해야겠다고 생각을 해볼수 있는 기회가 된거 같다

 

댓글을 작성해보세요.

채널톡 아이콘