inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

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

FakeRepository 작성 방법

해결된 질문

336

심세현

작성한 질문수 1

0

DB에 의존하지 않는 FakeRepository를 구현할 때 JPARepository의 작동 원리를 고려하여 직접 코드를 작성하는걸로 이해했는데, 그렇다면 FakeRepository에 복잡한 쿼리를 쓰는 메소드가 필요하다면 그때마다 코드를 만들어줘야 하나요??

예를 들면)

아래와 같은 메소드를 FakeRepository에서 구현하여 Test하고 싶을 때는 어떻게 하는 건가요?

@Query(value = "SELECT * FROM (SELECT * FROM customer ORDER BY like_total DESC) WHERE ROWNUM <= 3", nativeQuery = true)
	List<UserEntity> findTop3ByLikeTotal();

spring tdd 소프트웨어-테스트 unittest

답변 1

0

인프런 AI 인턴

안녕하세요, 인프런 AI 인턴입니다.

질문하신 내용과 관련하여, JPARepository를 상속하지 않고 DB에 의존하지 않는 FakeRepository를 구현하는 과정에서 복잡한 쿼리를 사용하는 메소드의 구현에 대해 궁금하신 것으로 보입니다. 이러한 상황에서는 실제 DB 환경을 모방하여 메모리 내에서 해당 로직을 구현해야 합니다. 복잡한 쿼리나 JPA의 특정 기능(native query 포함)을 사용한 메소드가 필요한 경우, 질문하신 예제와 같이, 실제 데이터베이스와 동일한 결과를 반환할 수 있도록 FakeRepository 내에서 해당 로직을 Java 코드로 재현합니다.

예를 들어, findTop3ByLikeTotal 메소드를 FakeRepository에서 구현하고자 한다면, 모든 사용자 데이터를 메모리 내 컬렉션(예: List, Map 등)에 저장한 다음, 해당 컬렉션에서 ‘likeTotal’을 기준으로 정렬하고 상위 3개의 데이터를 추출하는 로직을 직접 작성해야 합니다. 이때, 모든 데이터에 대해 메모리 내에서 정렬과 필터링을 수행하기 때문에, 실제 데이터베이스의 쿼리 성능과는 다를 수 있습니다.

비슷한 문제를 다루는 다른 사용자의 질문과 지식공유자의 답변이 있는 링크를 하나 안내드립니다. 이것은 FakeRepository를 구현하는 구체적인 예시는 아니지만, 테스트를 위해 복잡한 쿼리를 사용하는 특정 메소드를 어떻게 다룰 수 있는지에 대한 이해를 돕는 데 유용할 수 있습니다.

  • FakeRepository 만들 때 Join 테이블하는 경우 질문드립니다.
    • 이 질문과 답변에서는 서비스 테스트 시 Repository 상속해서 FakeRepository를 생성하고, JPA의 join을 사용해 데이터를 가져오는 경우 내부 구현에 대해 설명합니다. 복잡한 로직을 다루는데 있어 FakeRepository 내에 id와 list를 통해 엔티티 정보를 저장하고, 실제 사용 예제를 포함하여 설명합니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

0

심세현

질문이 엉성했는데 요점을 정확히 파악하고 답글 달아 주셨네요!!! Fake에서 궁금했던 점들 공유해주신 링크 통해서 잘 이해하고 갑니다ㅎㅎ

UserService, CertificationService 책임 분리 기준 질문

0

28

1

service.port 패키지로 이동한 UserRepository가 infrastructure에 있는 UserEntity에 의존

0

60

1

Service 소형 테스트 질문

0

86

1

조회 시 엔티티를 조회하는 것이 아닌QueryDSL을 많이 사용 시 Dto는 어떻게 하나요?

0

116

1

controller 의 port 패키지의 service 인터페이스 사용

0

73

1

빌드 문제

0

92

1

빌드 안 되시는 분들 참고

0

102

1

update에서 Repository.save

0

105

1

최종 완성된 코드를 받아 볼 수 있을까요?

0

158

1

의존성 역전으로 해결한 외부의존성?

0

166

1

좋은 설계

0

180

1

Controller에 테스트

0

140

1

JPA가 아닌 Mapper 아키텍처 기반 테스트 코드 작성

0

243

0

영속성 객체 구분으로 인한 JPA와 Querydsl의 Projection 사용

0

225

1

인프라계층 구현체와 테스트 구현체에 대한 질문

0

225

1

실습 코드 커밋

0

375

1

UserEntity 메서드

0

295

2

CertificationServiceTest에서 MailSender 인터페이스가 아닌 FakeMailSender를 이용하는 것

0

218

1

레이어드 아키텍처 개발에 대하여

0

232

1

BDDMockito의 when을 사용한 코드가 given 절에 있는 이유가 궁금합니다.

0

223

1

테스트에서 주입과 생성

0

200

1

프로젝트 코드는 제공해주시지 않는건가요?

0

383

2

개선된 아키텍처의 구조

0

277

1

서비스 레이어의 단위 테스트 범위 고민

0

190

1