inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

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

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

603

19

작성한 질문수 4

0

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

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

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

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

 

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

 

그래서 질문입니다.

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

답변 2

1

만수무강무병장수백년해로

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

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

요약하자면

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

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

가 될것 같습니다.

0

인프런 AI 인턴

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

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

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

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

UserService, CertificationService 책임 분리 기준 질문

0

28

1

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

0

59

1

Service 소형 테스트 질문

0

83

1

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

0

116

1

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

0

72

1

빌드 문제

0

92

1

빌드 안 되시는 분들 참고

0

102

1

update에서 Repository.save

0

105

1

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

0

156

1

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

0

162

1

좋은 설계

0

180

1

Controller에 테스트

0

139

1

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

0

242

0

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

0

224

1

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

0

223

1

실습 코드 커밋

0

373

1

UserEntity 메서드

0

294

2

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

0

218

1

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

0

231

1

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

0

223

1

테스트에서 주입과 생성

0

198

1

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

0

383

2

개선된 아키텍처의 구조

0

277

1

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

0

188

1