inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

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

스프링 통합 테스트

테스트할때 이해한게 맞는지, 또 이 문장이 왜 들어가있는지 궁금합니다.

620

김동현

작성한 질문수 38

0

학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.

1. 강의 내용과 관련된 질문을 남겨주세요.
2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.
(자주 하는 질문 링크: https://bit.ly/3fX6ygx)
3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.
(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)

질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.
=========================================
[질문 템플릿]
1. 강의 내용과 관련된 질문인가요? (예/아니오)네
2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)네
3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)네

[질문 내용]
1-1)

11111.jpgconfig.jpg

MemberServiceIntegrationTest 파일에서

@Autowired MemberService "memberService"

@Autowired MemberRepository "memberRepository"

임의로 제가 "" 를 표시했는데,

위 내용의 의미가 앱이 실행될때 @configuration 에서 @Bean 된 MemberService,MemberRepository 메서드를 찾아서 호출한다음 반환값을 제가 임의로 ""표시한 memberService, memberRepository 로 넣어주는걸로 이해했는데 맞는지 궁금합니다!

1-2)

test파일에서 @Autowired MemberService memberService 이 문장이 실행되면 스프링 빈에서 땡겨온 (db에 연결된)멤버 서비스 객체를 이용할 수 있다고 이해했는데요, @Autowired MemberRepository memberRepository 이 문장은 왜 들어가있는지 이해가 안갑니다. 필요한 문장인가요??

 

2). 테스트라는게 저는 처음에 다른 특별한 무언가로 처음부터 규격이 정해져 있고 뭐 그런건줄 알았는데, 그냥 test 폴더에 test 객체를 생성해서 돌리는거같다고 생각되서요. 어렵게 생각 안해도 되겠죠??

 

3) 강의 듣다보니 Jdbc 쪽은 이해가 잘 안되는데 가볍게 받아드리고 JPA 부터 신경써도 되겠죠?

다소 긴 질문 죄송합니다 ㅠㅠ

 

java spring mvc spring-boot

답변 1

1

y2gcoder

안녕하세요, 김동현 님. 공식 서포터즈 y2gcoder 입니다.

1-1) 말씀하신 게 맞습니다. 변수에 해당 객체 레퍼런스가 들어간다고 보시면 될 것 같습니다. 대신 스프링 빈 객체 등록은 그 이전에 등록되고 @Autowired를 통해 해당 타입의 빈을 찾아 연결해준다고 보시는게 더 정확합니다. 해당 부분은 스프링 핵심 원리 기본편 강의에 자세하게 소개되어 있습니다.

1-2) 이 부분은 강의 자료에 있는 코드와 다르게 작성하신 것 같습니다.

@Test
public void 회원가입() throws Exception {
 
    //Given
    Member member = new Member();
    member.setName("hello");

    //When
    Long saveId = memberService.join(member);

    //Then
    Member findMember = memberRepository.findById(saveId).get();
    assertEquals(member.getName(), findMember.getName());
}

강의 자료에 있는 회원가입 테스트입니다. 보시면 Then에서 memberRepository의 findById() 를 통해 member 객체를 가져와 검증하고 있는 것을 알 수 있습니다. memberService.findOne()을 이용하지 않는 이유는 검증하고 있는 대상의 메서드로 다시 검증하지 않기 위해서입니다. 지금 memberService에 대해 검증하고 있는 테스트 클래스입니다. 거기서 memberService의 메서드 하나를 테스트하기 위해 검증하고 있는 객체의 다른 메서드를 가져오는 것은 맞지 않습니다.

2) 개발은 어떻게 하느냐에 따라 한없이 자유롭기도 하고 엄격하기도 합니다. 실제로 테스트가 한줄도 없는 프로젝트도 생각보다 많이 있습니다. 시작을 부담없이 접근하는 것은 좋다고 생각합니다. 개발하시면서 테스트에 대한 필요성과 좋은 테스트에 대한 고민을 시작하게 되는 때 다시 생각하셔도 괜찮을 것 같습니다. 제 경험 상 테스트 코드는 있으면 분명히 좋습니다.

3) 지금 입문 단계에서는 충분히 그러실 수 있다고 생각합니다. 하지만 결국 JPA도 JDBC를 기반으로 만들어지고, DB에 대해 알면 알수록 JDBC에 대한 기본 지식을 잘 쌓아놔야 문제 해결이나 이해가 쉽습니다. Java 백엔드 개발자에게 결국 DB, SQL에 대한 지식은 필수적인 역량이고, JDBC도 알아야 할 날이 올 것이라 생각합니다.

 



감사합니다.

1

김동현

아 강의내용(22강)을 따라 했는데 강의자료랑 다를 수도 있군요. 알려주셔서 감사합니다!

"검증하고 있는 대상의 메서드로 다시 검증하지 않기 위해" memberRepository 의 메서드를 사용한다는 말씀 덕분에 어떻게 테스트해야 하는지에 대해 생각해볼 수 있었습니다.

강의를 한사이클 돌고 난뒤에 다시 복습하려 합니다.

주말에도 세심하게 답변해주시고 많은 도움되었습니다. 감사합니다!

1

y2gcoder

파이팅입니다! 혹시 강의 자료가 그 사이에 바뀌었을 수도 있으니 다시 확인해주십쇼!

0

김동현

넵 ㅎㅎ

..

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

130

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

371

1

테스트코드 메서드명 한글

0

204

2