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

19님의 프로필 이미지
19

작성한 질문수

Java/Spring 테스트를 추가하고 싶은 개발자들의 오답노트

안녕하세요. 강의 수강 후, 토이프로젝트에 적용해보다가 Fake Repository에 관해 궁금한 것이 생겨 질문드립니다!

작성

·

485

1

안녕하세요. 우선 강의 너무 잘 들었습니다.
설계를 개선하며 소형테스트를 풍부하게 작성할 수 있다는 것을 보고 이를 체화하려고 공부중인데요,
강의에서 배운것을 적용하다가 막힌 곳이 있어서 질문드립니다.

우선, 저는 강의와 유사하게 Repository를 추상화해서 프로덕션(~RepositoryImpl)과 테스트 환경(Fake~Repository)을 다르게 가져가고 있고, 막힌 부분은 아래와 같습니다.

프로덕션에서 groupBy를 사용하고, Dto로 바로 조회하는 방식으로 프로덕션 Repository에 코드를 작성한 부분이 있는데,
이를 Fake Repository에서 작성하려니까 막막하더라구요

왜 FakeRepository에 작성하려 하냐면, 제가 이해하기로는 FakeRepository를 구현해야 Service 레이어를 테스트할 때, 소형테스트로 작성할 수 있다고 이해를 했기 때문입니다.

 

막힌 부분에서 여러 고민해보다가, 다양한 조건절과 그룹핑이 들어간 쿼리는 어떻게 Fake Repository에 작성해서 테스트할 수 있을까? 하는 궁금증이 생겼습니다.

 

그래서 질문입니다.

  • Fake Repository를 사용해서 일부 Service 레이어의 로직을 테스트할 수 있지만, 좀 더 복잡한 쿼리들은 Fake로 구현(stream, filter등을 사용해서)하기 어려우니, Fake로 구현하지 않고 중형 테스트로 테스트한다.

  • 그리고 위의 기준이 소형테스트로 테스트할 지, 중형테스트로 테스트할 지 고려할 기준이 된다..?
    저는 위와같이 생각이 이어지는데, 혹시 옳은 생각일까요? 아님 열심히 Fake로 구현을 해봐야하는 것일까요?
    그것도 아니라면 다른 방법이 있을까요?


    강사님은 복잡한 쿼리들을 어떻게 하시는지 궁금합니다..!

    열심히 강의해주셨는데, 막상 적용해보려니 쉽지 않아서 민망합니다..
    답변 미제공 강의지만, 호옥시나 하는 마음에 질문 남깁니다.🥹

    좋은 강의 감사드립니다

     

답변 2

2

https://www.inflearn.com/questions/1044323

여기서 유사한 내용의 질문에 대해 답변을 해주셨네요

요약하자면

  1. 복잡한 쿼리는 h2 또는 stub 사용

  2. 복잡한 쿼리가 사용되지 않도록 객체, 테이블 모델링 및 설계

가 될것 같습니다.

0

안녕하세요, 인프런 AI 인턴이에요. 토이 프로젝트에 Fake Repository를 적용해보려고 하는데 문제가 생겼군요. Fake Repository를 사용하여 Service 레이어의 로직을 테스트하는 것은 좋은 접근 방법입니다. 그러나 복잡한 쿼리와 그룹핑을 포함한 경우 어떻게 작성해야 하는지 궁금하신 것 같아요.

Fake Repository를 사용해서 쿼리와 그룹핑을 테스트하는 방법은 두 가지로 생각해볼 수 있습니다. 첫 번째로는 Fake Repository 내에서 그룹핑 된 결과를 모든 데이터를 담은 Fake Dto를 반환하는 방법입니다. 이렇게 하면 실제 데이터베이스가 아닌 메모리나 컬렉션에 데이터를 저장할 수 있으며, 쿼리 조건과 그룹핑 조건을 동일하게 적용할 수 있습니다. 하지만 실제 데이터베이스와는 달리 모든 데이터를 담아야 하기 때문에 큰 용량의 데이터를 다루기에는 부적합할 수 있습니다.

두 번째로는 테스트용 데이터베이스를 사용하여 Fake Repository를 구현하는 방법입니다. 이를 위해 임베디드 데이터베이스를 사용하거나 메모리 데이터베이스를 구축할 수 있습니다. 이렇게 하면 실제 데이터베이스와 동일한 쿼리와 그룹핑을 수행할 수 있습니다. 그러나 테스트용 데이터베이스를 구축하고 유지하는 데에 추가적인 작업과 비용이 필요하므로 고려해야 할 사항이 될 수 있습니다.

어떤 방법을 선택하더라도 Fake Repository를 통해 그룹핑된 쿼리를 테스트하는 것은 가능합니다. 프로덕션 Repository와 유사한 로직을 가지고 있으면서 테스트에 더 적합한 데이터나 데이터베이스를 활용하는 방법을 고려해보시면 좋을 것 같아요. 추가로 필요한 도움이 있다면 질문해주세요!

19님의 프로필 이미지
19

작성한 질문수

질문하기