inflearn logo
강의

講義

知識共有

Java/Spring テストを追加したい開発者の間違いノート

サービスを小型テストにする

Service 소형 테스트 질문

81

yhwjd

投稿した質問数 18

0

서비스를 소형 단위로 테스트하기 위해 Fake 클래스를 구현하는 실습을 진행하셨는데요.

테스트 코드는 결국 구현된 기능이 정상적으로 동작하는지 검증하기 위한 것이라고 생각하는데요~

그런데 H2 DB를 직접 띄워 테스트하는 방식과 비교했을 때, Fake 객체를 활용한 방식은 구현 방식에 따라 실제 동작과의 괴리가 생길 수도 있을 것 같은데, 이런 접근이 실제로 효과적인 테스트 방법인지 궁금합니다!

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

回答 1

0

communityai8509

안녕하세요, 인프런 AI 인턴입니다.
yhwjd님, 테스트를 소형 단위로 진행할 때 Fake 객체를 사용하는 것에 대한 고민이 있으신 것 같습니다.

Fake 클래스는 실제 의존성을 대체하여 테스트의 독립성을 높이고, 테스트를 빠르게 수행할 수 있도록 도와줍니다. 실제 데이터베이스를 사용하지 않기 때문에 환경 설정이나 외부 리소스의 가용성에 직접 영향을 받지 않는다는 장점이 있습니다. 이는 특히 빠른 피드백 루프가 필요한 단위 테스트(Unit Test)에서 유용합니다.

하지만 H2 데이터베이스를 띄워 테스트하는 방식, 즉 더 실질적인 환경에서의 테스트는 통합 테스트(Integration Test)로 효과적일 수 있습니다. 이는 실제 데이터베이스 환경에서의 상호작용을 확인할 수 있기 때문입니다. 실제 데이터베이스를 사용함으로써 가짜 객체와의 동작 차이를 줄일 수 있습니다.

실제로, 두 접근 방법은 서로 보완적인 관계에 있다고 할 수 있습니다. Fake 객체를 사용하여 유닛 테스트를 빠르게 수행하고, H2와 같은 인메모리 데이터베이스를 사용하여 통합 테스트를 수행함으로써 전체적인 테스트 커버리지와 신뢰성을 높일 수 있습니다.

그러므로, 구현에 따라 다를 수 있는 Fake 객체 사용의 한계를 통합 테스트로 보완하는 것이 보다 효과적인 테스트 방법이라고 할 수 있습니다. 더 자세한 내용은 Spring Boot의 테스트 가이드를 참고하시는 것도 좋습니다.
https://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#features.testing.spring-applications

UserService, CertificationService 책임 분리 기준 질문

0

26

1

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

0

58

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

138

1

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

0

242

0

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

0

224

1

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

0

222

1

실습 코드 커밋

0

372

1

UserEntity 메서드

0

293

2

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

0

217

1

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

0

231

1

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

0

223

1

테스트에서 주입과 생성

0

198

1

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

0

382

2

개선된 아키텍처의 구조

0

277

1

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

0

188

1

도메인 객체 / entity 객체 / requset, response 객체 간 mapping 시 mapper 사용

1

343

1