인프런 커뮤니티 질문&답변

양태웅님의 프로필 이미지

작성한 질문수

실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발

회원 기능 테스트

왜 Test에 transactional을 또 붙여야하나요?

21.07.16 16:35 작성

·

956

2

service에 이미 @Transactional을 붙어있는걸로 보이는데 왜  test코드에 또 Transactional을 붙여줘야 하는건가요?

어차피 Service에서 데이터 추가 , 삭제는 다 이루어지고 있는것 아닌가요?

답변 2

3

김영한님의 프로필 이미지
김영한
지식공유자

2021. 07. 16. 20:59

안녕하세요. 양태웅님

테스트는 여러번 수행해야 하는데, 기존 데이터가 계속 누적되면 다음 테스트에 영향을 줄 수 있습니다. 따라서 테스트 이후에 저장된 데이터를 모두 삭제해야 합니다.

이런 문제를 해결하기 위해 테스트에서 @Transactional을 붙여주게 되면 특별하게 데이터베이스에 저장된 결과를 커밋하지 않고 롤백합니다. 그래서 테스트를 여러번 실행해도 동일한 상황에서 테스트를 할 수 있습니다.

감사합니다.

0

양태웅님의 프로필 이미지
양태웅
질문자

2021. 07. 21. 14:28

그러면 테스트에서 롤백을 하지 않으려면 test에 transactional을 안붙여도되는건가요?

김영한님의 프로필 이미지
김영한
지식공유자

2021. 07. 21. 23:21

네 맞습니다^^

테스트에 transactional이 없으면 테스트에서 트랜잭션 자체를 실행하지 않습니다.

transactional + @Commit를 사용하셔도 됩니다.