Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[BE] ScheduleRecommender의 테스트 방식에 문제가 있어요 :( #350

Open
2 tasks
hw0603 opened this issue Sep 18, 2024 · 1 comment
Open
2 tasks
Assignees
Labels
🐈‍⬛ 백엔드 백엔드 관련 이슈에요 :) 🐞 버그 버그가 발생했어요 :( 🧪 테스트 테스트를 해요 :)

Comments

@hw0603
Copy link
Member

hw0603 commented Sep 18, 2024

이슈 요약

현재 TotalScheduleRecommenderTest 수행 시 @Transactional 이 없으면 LazyInitializationException 이 발생합니다.
findAllByAttendeeIn() 에서 Schedule을 가져올 때 프록시 객체로 가져오는데, 테스트 코드의 단언문이 트랜잭션 밖에 있으므로 attendee를 조회할 수 없기 때문입니다.

프로덕션 코드의 경우 참여자 조회는 Service에서 하는데, 지금 테스트하는 것은 Service 내에서 참여자 조회 후 호출하는 추천기 로직이니.. 캐시 히트가 발생하지 못해서 프록시 객체로 남아 있게 됩니다.

현재는 테스트 코드에 @Transactional이 명시되어 있으므로, @BeforeEach 로 정의된 setUp() 에서 테스트 데이터를 삽입하는 로직과 같은 트랜잭션으로 묶여 캐시에서 가져온 '정확히 동일한' 객체를 단순 비교하고 있어 테스트 코드가 통과하는데, 테스트 코드의 존재 자체를 퇴색시키는 구현입니다. (false positive 한 상황 발생 가능)

실제로 em.clear() 이후에는 값이 같은 새로운 객체가 만들어지므로 테스트에 실패합니다.
테스트코드에서 @Transactional 어노테이션의 허용 여부와 별개로, 테스트코드의 로직 자체가 어긋나 있어 수정이 필요합니다.

상세 작업 내용

  • 테스트 코드에서의 @Transactional 사용 논의
    • 사용하지 않을 시 해당 로직을 테스트 할 수 있는 방안 마련 필요
  • 캐시와 무관하게 테스트할 수 있도록 테스트 코드 수정

레퍼런스

@hw0603 hw0603 added 🐈‍⬛ 백엔드 백엔드 관련 이슈에요 :) 🐞 버그 버그가 발생했어요 :( 🧪 테스트 테스트를 해요 :) labels Sep 18, 2024
@hw0603 hw0603 added this to the 5차 데모데이 milestone Sep 18, 2024
@hw0603 hw0603 self-assigned this Sep 18, 2024
@hw0603 hw0603 added this to 2024-momo Sep 18, 2024
@hw0603
Copy link
Member Author

hw0603 commented Sep 19, 2024

#336 의 중복이었네요😅

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
🐈‍⬛ 백엔드 백엔드 관련 이슈에요 :) 🐞 버그 버그가 발생했어요 :( 🧪 테스트 테스트를 해요 :)
Projects
Status: No status
Development

No branches or pull requests

1 participant