Open utterances-bot opened 3 years ago
비밥 좋은 글 잘 읽었습니다! 질문이 있는데요 :)
제가 이해한 바를 한 줄로 요약하면 "JPA를 사용하는 환경에서 rollback을 위한 테스트 코드를 짤 때 @Transactional보다 @AfterEach에 메서드에서 JpaRepository를 이용해 deleteAll() 하는 방식을 사용하자"라고 이해했는데 맞나요?
JPA를 사용하지 않는 환경이라면 LazyInitializationException가 발생하지 않으니 사용해도 괜찮은건가요?
@sonypark
답변 감사합니다~
@pci2676
테스트의 목적에 따라 @Transactional
의 사용 여부를 결정해야한다는 생각이에요!
Service layer의 테스트에서 '@Transactional
어노테이션의 동작까지 함께 테스트한다'를 목표로 둔다면 @Transactional
어노테이션을 붙이는 것은 이를 불가능하게 만드는 것이겠네요! JPA를 사용하게 되었을 때, @Transactional
어노테이션의 동작의 테스트가 당연히 필요하다는 생각이고요!
반면에 DataJpaTest 같은 경우에는, @Transactional
어노테이션의 동작을 테스트하기보다는, 해당 repository의 동작방식의 테스트를 목적으로 두는 것이고요!
GPU 내껀데팀 부스에 찾아와주셔서 좋은 인사이트를 주고 가주셔서 감사합니다! :+1: 찾다보니 이 글까지 이르게 됬네요!
JPA 사용시 테스트 코드에서 @Transactional 주의하기 | javable
서비스 레이어(@Service)에 대해 테스트를 한다면 보통 DB와 관련된 테스트 코드를 작성하게 된다. 이러면 테스트 메서드 내부에서 사용했던 데이터들이 그대로 남아있게 되어서 실제 서비스에 영향을 미칠 수 있기 때문에 테스트가 끝나면 지워야 할 필요가 있다. 이러한 문제를 해결하
https://woowacourse.github.io/tecoble/post/2020-08-31-jpa-transaction-test/