Persistence Layer

Persistence Layer 에서 테스트를 작성해야하는 이유?

JpaRepository 를 사용하는 경우에 쿼리메소드를 사용해서 이름을 잘 지으면 쿼리가 잘 날아갈 게 명확한데 왜 테스트를 작성해야 할까요?

우리가 만든 findAllBySellingStatusIn 는 간단한 쿼리니까 예측이 쉽게 되는데, 만약 where 절의 조건이 엄청 많아서 쿼리 메서드가 엄청 길어지면 파라미터를 잘못 줄 수도 있겠죠.

또한 미래에 jpql 처럼 날것의 쿼리를 작성하거나 querydsl을 적용해서 사용하거나 더 나아가 jpa가 아닌 환경으로 변할 수 있죠. 쉽게 말해 어떤 구현하는 기술, 구현하는 방법에 대한 것들이 변경될 수 있기 때문에 보장하는 차원에서 테스트 코드를 작성해야 합니다.

즉,

첫 번째로 내가 작성한 코드가 제대로 된 쿼리가 날라갈 것인가에 대한 보장을 하기 위해 테스트를 작성해야하고,

두 번째로는 작성한 코드가 미래에 어떤 형태로 변형될지 모르기 때문에 미래에 대한 보장도 같이 해야해서 테스트를 꼭 작성하는 것이 좋습니다.

Repository에 대한 테스트 코드

이제 단위 테스트에서 넘어와서 스프링 환경에서의 통합 테스트를 진행 해볼 건데 사실상 리포지토리 테스트는 단위 테스트 성격에 가까운 테스트입니다.

통합 테스트는 어쨌든 스프링 서버를 띄워서 리포지토리에 대한 테스트를 진행할 거지만 레이어별로 끊어서 봤을 때는 데이터베이스에 엑세스하는 계층이 Persistence Layer 의 역할이고, 데이터베이스에 엑세스하는 로직만 가지고 있기 때문에 기능 단위로 보자면 약간 단위 테스트 성격을 갖고 있기는 합니다.