본문 바로가기
Spring/스프링 입문

[스프링 입문] 3 - (4) 회원 서비스 개발, (5) 회원 서비스 테스트

by Poorm 푸름 2023. 8. 4.

 

[회원 서비스 개발]

 

1. 회원 가입 만들기

 

src - main - java - hello.hellospring 우클릭  New - Package 클릭 → service 입력 후 우클릭 

New - Java Class → MemberService 입력  강의자료 코드 붙여넣기 

 

 

☞ validateDuplicateMember : 중복회원을 검사하는 메서드

                                                  Ctrl + Alt + T 단축키 입력 후 method 라고 검색

                                                  Extract Method 클릭하고 Name 설정

 

☞ .ifPresent(m -> : m 안에 값이 있다면 아래 로직이 동작한다.

 

☞ throw new IllegalStateException : 객체의 상태가 매소드 호출에는 부적절한 경우

                                                             즉 예외적인 경우의 호출

 

 

☞ return memberRespository.findAll : 이것의 반환타입은 List<Member> findAll()로

                                                                MemberRespositry 확인하면 나온다

                                                           

 

[회원 서비스 테스트]

 

1. 회원가입 (join) 테스트

 

src - main - java - hello.hellospring - service -  MemberService 클릭  public class 안에 커서 두기

Ctrl + Shift + T 입력 후 Create New Test 클릭 → 아래와 같이 Member 모두 선택 후 Ok

 

 

** 테스트는 한글로 이름적는 것이 가능하다 **

MemberService memberService = new MemberService() : new MemberService 만들기 

                                                                                                    (test 작성할 때 가장 첫 작업)

 

☞ //given : 어떠한 데이터를 기반으로 하는지

     Member member = new member : main 메서드와 비슷

     member.setName(''hello") 

 

☞ //when : 검증할 대상

     Long saveId = memberService.join(member) : saveId에 member 저장 

                                                                                 (MemberService 클래스의 join 메서드 참고)

                                                                                  Ctrl + Alt + V 해서 Long saveId 설정

 

☞ //then : 검증 수행방법

     Member findMember =  memberService.findOne(saveId).get()

     : 처음에는 memberService.findOne(saveId) 입력 →  Ctrl + Alt + V 해서 Optional로 작성 후

       Optional<Member> one = 부분 삭제 → .get() 입력 후 Ctrl + Alt + V 해서 findMember 입력

 

☞ assertThat(member.getName()).isEqualTo(findMember.getName()) : 서로 같다면 성공

                                                                                                                      (검증 단계)

                                                                                                                 

2. 중복회원 테스트 

 

 

☞ //given

     Member member1 = new member : member1 저장 

     member.setName(''spring") 

     Member member2 = new member : member2 저장 

     member.setName(''spring2") 

 

☞ //when

     memberService.join(member1) 

     IllegalStateException e = assertThrow(IllecalStateException.class, () ->

     memberService.join(member2)

     assertThat(e.getMessage()).isEqualTo("이미 존재하는 회원입니다.") 

 

  : 간단한 방법

    assertThrow(IllecalStateException.class, () -> memberService.join(member2) 입력 후

    Ctrl + Alt + V 입력해서 Illegal 만들고 이름 e 입력

    member1과 member 2의 회원 이름이 중복되면  validate에서 예외 e 가 터진다

   ( IllecalStateException e는 MemberService에서 validateDuplicate 메서드 참고 )

 

 ☞ assertThat(e.getMessage()).isEqualTo("이미 존재하는 회원입니다.") 

 

   : 예외의 e 메세지가 isEqualTo("이미 존재하는 회원입니다.") 와 같다면 테스트 성공

 

 

여기서 또다른 방법 (57~59줄)

 

☞ try {

          memberService.join(member2);

          fail(); }

  : member1를 member2와 비교했을 때 같지 않다면 예외는 없다

 

catch (IllegalStateException e){

          assertThat(e.getMessage()).isEqualTo("이미 존재하는 회원입니다.") }

  : 같다면 예외가 발생하는데 예외의 e 메세지가 isEqualTo("이미 존재하는 회원입니다.") 와 같다면 테스트 성공

    단, isEqualTo("이미")라면 같지 않으므로 실패

    ( e.Message는 MemberService에서 validateDuplicate 메서드 참고 )

 

 

이때 생기는 문제점 1 !!

 

지금은 문제가 없지만 만약 회원가입 Test 에서의 setName과 중복회원 Test에서의 setName이 같다면

중복돼서 쓰이기 때문에 오류가 생긴다

해결 방안으로 아래와 같이 MemoryMemberRespositoryTest 때처럼 MemorymemberRespository 지정 후

clear 코드를 넣어준다

 

이때 생기는 문제점 2 !!

 

MemberService에 있는 memberRespository도 new, MemberServiceTest에 있는

memberRespository도 new 즉 서로가 다른 객체

굳이 두 개로 안쓰고 같은걸로 바꿔준다

 

해결방안1

: MemoryService에서 12줄 private final MemberRespository memberRespository = new ~~ 부분에서

  = new ~~ 부분 삭제

  fn + Alt + Insert 입력 후 Constructor 클릭 후 Ok

 

해결방안2

: MemoryServiceTest에서도 마찬가지로 MemoryService / MemoryMemberRespository 에서

  = new ~ 부분 삭제 후 아래와 같이 @BeforeEach 코드 작성하기

 

 

 

이 때 알아둘 단축키!! 

 

1. 변수 추출

 Ctrl + Alt + V

 

2. Generate 

☞  Fn + Alt + insert 입력 후 검색

 

3. Extract Method

Ctrl + Alt + T

 

[출처] 김영한 강사님 인프런 스프링 입문 

https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-%EC%9E%85%EB%AC%B8-%EC%8A%A4%ED%94%84%EB%A7%81%EB%B6%80%ED%8A%B8

 

[무료] 스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술 - 인프런 | 강의

스프링 입문자가 예제를 만들어가면서 스프링 웹 애플리케이션 개발 전반을 빠르게 학습할 수 있습니다., 스프링 학습 첫 길잡이! 개발 공부의 길을 잃지 않도록 도와드립니다. 📣 확인해주세

www.inflearn.com