You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
현재 TotalScheduleRecommenderTest 수행 시 @Transactional 이 없으면 LazyInitializationException 이 발생합니다. findAllByAttendeeIn() 에서 Schedule을 가져올 때 프록시 객체로 가져오는데, 테스트 코드의 단언문이 트랜잭션 밖에 있으므로 attendee를 조회할 수 없기 때문입니다.
프로덕션 코드의 경우 참여자 조회는 Service에서 하는데, 지금 테스트하는 것은 Service 내에서 참여자 조회 후 호출하는 추천기 로직이니.. 캐시 히트가 발생하지 못해서 프록시 객체로 남아 있게 됩니다.
현재는 테스트 코드에 @Transactional이 명시되어 있으므로, @BeforeEach 로 정의된 setUp() 에서 테스트 데이터를 삽입하는 로직과 같은 트랜잭션으로 묶여 캐시에서 가져온 '정확히 동일한' 객체를 단순 비교하고 있어 테스트 코드가 통과하는데, 테스트 코드의 존재 자체를 퇴색시키는 구현입니다. (false positive 한 상황 발생 가능)
실제로 em.clear() 이후에는 값이 같은 새로운 객체가 만들어지므로 테스트에 실패합니다.
테스트코드에서 @Transactional 어노테이션의 허용 여부와 별개로, 테스트코드의 로직 자체가 어긋나 있어 수정이 필요합니다.
상세 작업 내용
테스트 코드에서의 @Transactional 사용 논의
사용하지 않을 시 해당 로직을 테스트 할 수 있는 방안 마련 필요
캐시와 무관하게 테스트할 수 있도록 테스트 코드 수정
레퍼런스
The text was updated successfully, but these errors were encountered:
이슈 요약
현재
TotalScheduleRecommenderTest
수행 시@Transactional
이 없으면LazyInitializationException
이 발생합니다.findAllByAttendeeIn()
에서Schedule
을 가져올 때 프록시 객체로 가져오는데, 테스트 코드의 단언문이 트랜잭션 밖에 있으므로attendee
를 조회할 수 없기 때문입니다.프로덕션 코드의 경우 참여자 조회는 Service에서 하는데, 지금 테스트하는 것은 Service 내에서 참여자 조회 후 호출하는 추천기 로직이니.. 캐시 히트가 발생하지 못해서 프록시 객체로 남아 있게 됩니다.
현재는 테스트 코드에
@Transactional
이 명시되어 있으므로,@BeforeEach
로 정의된setUp()
에서 테스트 데이터를 삽입하는 로직과 같은 트랜잭션으로 묶여 캐시에서 가져온 '정확히 동일한' 객체를 단순 비교하고 있어 테스트 코드가 통과하는데, 테스트 코드의 존재 자체를 퇴색시키는 구현입니다. (false positive 한 상황 발생 가능)실제로
em.clear()
이후에는 값이 같은 새로운 객체가 만들어지므로 테스트에 실패합니다.테스트코드에서
@Transactional
어노테이션의 허용 여부와 별개로, 테스트코드의 로직 자체가 어긋나 있어 수정이 필요합니다.상세 작업 내용
@Transactional
사용 논의레퍼런스
The text was updated successfully, but these errors were encountered: