inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술

회원 서비스 테스트

BeforeEach

해결된 질문

430

멍멍젤리

작성한 질문수 1

1

service에서 repository를 주입받을 때,

repository는 메소드 실행 전 new로 새로 만들기 때문에 테스트케이스의 메소드는 전부 다른 인스턴스를 주입받는 것 아닌가요?

 

아래 비슷한 질문에서 repository의 변수는 static이기 때문에 동일한 타입의 인스턴스가 전체 공유하고 있다고 답변 달아주신걸 확인했습니다.

이부분은 repository를 주입받는 방식이 아니라 service에 선언했을때도 동일한데 그럼 DI방식으로 분리하기 전후 차이점이 무엇인가요?

java spring mvc spring-boot

답변 1

1

인프런 AI 인턴

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

멍멍젤리님의 질문은 각각의 테스트 케이스가 서로 다른 MemoryMemberRepository 인스턴스를 사용하는 것에 대한 이해와 이를 통한 의존성 주입(DI) 전후의 차이점을 문의하고 있습니다.

일반적으로, 테스트에서 @BeforeEach를 사용하여 각 테스트 메서드 실행 전에 새로운 인스턴스를 생성하는 이유는 각 테스트가 독립적으로 실행될 수 있도록 보장하기 위함입니다. 그렇게 함으로써 아무리 많은 테스트를 실행하더라도, 한 테스트의 실패나 상태 변화가 다른 테스트에 영향을 주지 않습니다. 설명하신 두 번째 이미지에서 서포터즈분께서 MemoryMemberRepository의 내부 맵(store)이 static으로 선언되어 있어서 같은 저장소를 여러 인스턴스가 공유한다고 언급한 것으로 보입니다.

DI 방식으로 분리하기 전후의 차이점은 MemberService 객체가 MemoryMemberRepository 객체에 직접적으로 의존하지 않도록 만들어주는 것입니다. 즉, MemberService 내에서 new MemoryMemberRepository()와 같이 직접적으로 리포지토리 객체를 생성하는 대신, 외부에서 생성된 MemoryMemberRepository 객체를 생성자를 통해 주입받음으로써, 리포지토리의 구현 변경이나 테스팅 시 다른 리포지토리의 사용 등을 유연하게 대응할 수 있게 되는 것입니다.

비슷한 내용에 대한 설명을 담은 게시글 링크는 다음과 같습니다:

각 링크의 답변에서 @BeforeEach 사용의 목적, 의존성 주입(DI)의 이점, 그리고 static 필드의 공유 특성 등이 이미 잘 설명되어 있습니다.

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

3

멍멍젤리

아 아래 내용들도 확인해보니 Test의 각 메서드마다 같은 repository를 사용해야한다는 뜻이 아니라 Test와 Service에서 같은 repository를 사용해야된다는 뜻인것같네요!

빠른 답변 감사합니다~!👍👍

..

0

76

2

Unused property.....

0

102

2

project JDK is misconfigured

0

132

2

외부 API의 ID 타입(String/UUID)과 내부 도메인의 ID 타입(Long)이 불일치할 때의 설계 정석

0

83

2

단위/통합 테스트 버전충돌 문제

0

91

2

❗️springboot 4.0.2 버전 aspectj dependency 설정❗️

0

230

1

왜 컨트롤러는 변한게 없는데 새로 만든 html 파일이 뜨나요?

0

104

2

윈도우 build test오류 질문

1

103

2

테스트 관련 공부에 대한 조언을 얻고 싶습니다

0

101

2

테스트 실행 시 에러 질문

0

292

1

name을 통한 비교와 객체를 통한 비교

0

77

1

빌드 후 libs 없음

1

129

1

윈도우 gradlew.bat 에러

0

168

1

@PostMapping("/members/new")가 동작하지 않습니다

0

90

1

java static class와 kotlin class

0

79

1

스프링 DB연결

0

127

1

소요 시간

0

87

2

ddl.sql에 빨간 밑줄

1

102

2

welcome page 에러

0

183

3

잘 모르겠습니다.

0

164

2

fail을 똑같이 쳤는데 오류가 발생해요

0

157

2

index.html Welcome page

0

125

1

프로젝트 gradle-groovy ?

0

370

1

테스트코드 메서드명 한글

0

202

2