DataJpaTest

Tadap·2023년 5월 22일

캡스톤

목록 보기
1/2

캡스톤을 하면서

배우는 점이 많다. 역시 모든건 머리를 박아보면서 배우는게 가장 빨리, 많이 배우는것 같다.

이렇게 배운것을 정리를 해야한다.

인간은 망각의 동물 + 원래 잘까먹는 특성을 합해 문제가 생겨 머리를 박아가면서 1시간에서 몇일 걸려 해결을 해도 정리를 안하면 까먹는다.(벌써 한 3개는 까먹은듯) 그래서 정리를 하기로 했다

DataJpaTest

RepositoryTest 를 할 때는 굳이 모든것을 다 띄울 필요가 없다.(Service, Controller도 Mock으로 해결)
따라서 컨테이너에 JPA에 필요한 설정만 등록하여 사용한다. -> 더 빠른 속도로 테스트가 가능하다

문제점

Post, Like, User 테이블을 두고서 기능 개발 도중, Like 테이블에서 개수를 조회해서 리턴을 해주는 과정에 테스트에 오류가 생겼다.

증상

  1. SpringApplication을 띄워 Postman으로 테스트 시에는 정상 동작한다.
  2. DataJpaTest시에 개수가 n개가 아닌 0개로 나온다

결론

JPA는 사용하면 영속성 컨텍스트 를 사용한다.
DataJpaTest 를 사용하면 위 영속성 컨텍스트에서 DB로 데이터를 넘기지 않고 테스트를 끝낸다.
(어차피 Rollback을 하기 때문에)
따라서 entityManger.flush()를 호출해 주면 해결할 수 있다.
혹은 GenerationType을 IDENTITY로 해두면 ID를 받아오기 위해 데이터를 insertQuery를 실행하게 되고 따라서 문제가 해결된다.

참고 링크

0개의 댓글