인프런 영문 브랜드 로고
인프런 영문 브랜드 로고

Inflearn Community Q&A

tkdduq8260's profile image
tkdduq8260

asked

Developing Spring and JPA based web applications

안녕하세요! 회원가입 인증 메일 테스트 케이스 작성중 궁금한게 생겼습니다!

Written on

·

281

0

안녕하세요! 백기선님 강의 정말로 잘 듣고 있습니다.

인증 메일 테스트 케이스 작성을 하다가 궁금한점이 생겨서 이렇게 질문을 올리게 되었습니다.
인증메일 확인 - 입력값 정상 테스트 케이스를 약간 수정해서  

이런식으로 작성했습니다. 토큰을 생성한뒤 db에 해당 객체를 저장하기때문에  @Transactional어노테이션을 넣지 않았습니다.
이 테스트 케이스는 혼자서 동작시키면 잘 작동하지만, 다른 테스트 케이스와 같이 돌리게 되면 작동하지 않습니다. (DataIntegrityViolationException 가 발생합니다.)
다른 테스트케이스에서도 똑같은 nickname을 사용하고 있기 때문에 발생하는 예외인것 같습니다. 
그런데 왜 백기선님의 코드에서는 오류가 발생하지 않지? 라는 생각을 가지게 되어서 차이점을 살펴봤더니
유일한 차이점이 @Transactional 어노테이션이었고 해당 어노테이션을 넣으니까 모든 테스트케이스가 정상적으로 동작했습니다.
@Transactional 어노테이션이 Test가 끝난뒤에 db를 초기화하는 기능까지 있는건가요? 이해가 잘 되지않습니다..

spring-bootspringjavaJPAthymeleaf

Answer 2

0

tkdduq8260님의 프로필 이미지
tkdduq8260
Questioner

아 감사합니다! 이해됐습니다!

0

whiteship님의 프로필 이미지
whiteship
Instructor

@Test가 있는 메소드에 @Transactional을 사용하면 스프링은 해당 메소드에서 일어난 DB 작업을 자동으로 롤백시킵니다. 다른 테스트에 영향을 주지 않기 위해서죠. 그래서 @Transactional이 있는 경우에는 해당 데이터가 테스트 끝나고 사라지니까 다른 테스트에서도 다시 똑같은 데이터를 넣을 수 있는겁니다. @Transactional이 없으면 말씀하신대로 테스트 간에 중복 데이터가 생겨서 문제가 생기는거구요.

tkdduq8260's profile image
tkdduq8260

asked

Ask a question