inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

토비의 클린 스프링 - 도메인 모델 패턴과 헥사고날 아키텍처 Part 1

회원 애플리케이션 기능 추가

테스트는 인터페이스를 대상으로 만드는것에 대해 궁금한 점이 있습니다.

32

LichKing

작성한 질문수 4

0

평소에 인터페이스와 구현체를 만들때 테스트를 어디에 만드는게 맞을까란 고민을 했었는데, 마침 토비님이 강의에서 언급해주셔서 너무 반가웠는데요.


테스트는 인터페이스에 만들라는 말씀 잘 이해했습니다. 스펙을 테스트하기에 인터페이스를 대상으로 테스트를 만들어야하는것도 이해를 했는데요. 구현체가 2개 이상이 되면 어떻게 하시는지 궁금합니다. 각 구현체들이 스펙을 준수하는지 테스트 코드를 작성해야할텐데 인터페이스를 대상으로 테스트를 작성하면 구현체가 1개일땐 문제가 없는데 2개 이상일땐 좀 난감해지더라고요.

java spring spring-boot jpa 리팩터링 ddd

답변 1

0

인프런 AI 인턴

안녕하세요, 인프런 AI 인턴입니다. LichKing님 질문과 관련해, 인터페이스와 여러 구현체의 테스트 경계를 다룬 기존 답변을 추천드립니다.

인터페이스 자체는 실행 가능한 구현이 아니므로 직접 테스트하기보다는, 인터페이스가 정의한 계약을 각 구현체에 동일하게 적용하여 테스트하는 방식으로 생각할 수 있습니다. 구현체가 여러 개라면 공통 테스트 시나리오를 재사용하고, 각 구현체를 주입하여 모든 구현체가 동일한 스펙을 만족하는지 확인하는 방식입니다.

다만 구현체마다 DB, 외부 API 등 구체적인 기술이 다르다면 공통 계약 테스트와 별도로 구현체 특유의 동작을 검증하는 테스트도 추가할 수 있습니다. 즉, “인터페이스 테스트 하나”로 모든 구현체를 대신하는 것이 아니라, 동일한 계약 테스트를 구현체별로 실행한다고 이해하시면 좋습니다.

관련 답변

  • 스프링 데이터 JPA 리포지토리 인터페이스를 테스트하는 방법과 테스트 대상에 대한 답변
    인터페이스 자체를 테스트하기보다는 실제 구현체와 스프링 컨테이너, DB까지 연결된 통합 테스트로 인터페이스의 동작을 검증하는 이유를 설명합니다. 구현체가 런타임에 생성되는 경우에도 인터페이스를 통해 테스트할 수 있는 관점을 참고할 수 있습니다.

  • 인터페이스
    인터페이스는 외부에 제공할 계약을 정의하고, 구현체 내부의 상세 로직은 구현체에 감추어야 한다는 점을 설명합니다. 또한 하나의 구현체가 여러 인터페이스를 구현할 수 있으므로, 인터페이스와 구현체의 관계를 테스트 설계에 적용할 때 도움이 됩니다.

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

Part 2 듣기전 복습하던 중, 아키텍처에 관한 질문이 있습니다.

0

47

2

JPA 엔티티로 만들었다고 기술종속이 아닌지에 대한 질문

0

55

3

안녕하세요 토비님 혹시 완성된 코드의 repository 주소는 없을까요?

0

127

2

테스트 관련 질문!

0

104

2

N+1 관련해서 질문있습니다.

0

150

3

도메인 모델에서 관계와 규칙을 구분하는 방법

0

145

2

헥사고날 아키텍처에서의 배치, 시큐리티, 비동기 이벤트 처리는 어떻게 하나요?

0

225

2

어댑터에서 도메인에 직접 의존하는 경우에 대해

0

214

2

Member 도메인이 PasswordEncoder를 받는 구조 질문 있습니다.

0

184

2

MemberService와 EmailSender 책임 분리에 대한 질문

0

151

2

NonNullApi를 NullMarked로 대체하라고 합니다.

0

217

2

39. 문서와 코드 다듬기 updateInfo 테스트 질문 있습니다.

0

118

2

Repository Adapter 설계에 대해 피드백을 부탁드립니다

0

152

2

헥사고날 part2 강의 출시 예정일 문의 드립니다.

0

315

2

PT 문의사항

0

145

1

초기 어플리케이션 구동 시 compose.yml 파싱 오류

0

219

2

애플리케이션의 JPA 리턴과 도메인 모델

0

174

2

애그리거트 루트의 하위 도메인들의 depth가 깊어질 때 문의

0

186

2

페이징 처리를 해야한다면 어떻게 해야할까요?

0

242

2

애그리거트의 repository

0

171

2

Domain Expert가 정확히 어떤 역할을 하는 사람인가요?

0

322

1

회원 애플리케이션 서비스 테스트 (1)

0

153

2

정적 팩토리 메서드 관련 질문드립니다!

0

146

2

spotbug + @NonNullApi 로만 Null 방어가 될까요?

0

173

2