DataJpaTest를 활용한 테스트
지난 포스팅에서는 Mockito를 활용하여 Service 객체가 적절하게 내부 객체를 호출하는지를 알아보는 테스트를 진행했었다. 그 과정에서 Mock 객체를 활용한 이유는 테스트의 주 관심 대상이 아닌 객체는 올바르게 동작한다는 가정을 하기 위해서였는데, 이제 해당 Mock 객체가 올바르게 동작했는지 테스트해보자.
마찬가지로 회의실 예약 예제를 활용해보자.
이번 테스트의 중점은 Spring Data JPA의 동작이다. 즉, 데이터가 실제로 올바르게 들어가고 나오는지를 보면 된다. 코드를 보자.
간단하다. testRetrieveRooms 메서드를 보면, 먼저 "A"라는 회의실을 생성해 roomRepository에 저장한다. 저장된 모든 회의실 중 첫번째 회의실을 꺼내온 다음, 회의실의 이름이 위에서 저장했던 "A"와 일치하는지를 확인한다.
테스트 함수를 실행해보면 깔끔하게 pass 된다. Mockito를 활용했던 지난 테스트와의 차이는, 가짜 객체인 Mock이 아닌 실제 Repository 객체를 활용했다는 것이다. DataJpaTest 애노테이션을 선언해주면 내부적으로 in-memory database를 생성하여 선언된 Entity 클래스들을 스캔한다. 따라서 위와 같이 실제 DB가 동작하는 모습을 확인할 수 있다.
또, 테스트를 마치고 직접 데이터를 롤백하거나 Transactional 애노테이션을 달아줄 필요는 없다. DataJpaTest가 내부적으로 Transactional 애노테이션을 포함하고 있기 때문에 롤백은 자동으로 수행된다.
참고
https://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-testing.html