[스프링 입문] 3 - (4) 회원 서비스 개발, (5) 회원 서비스 테스트
[회원 서비스 개발]
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
[출처] 김영한 강사님 인프런 스프링 입문
[무료] 스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술 - 인프런 | 강의
스프링 입문자가 예제를 만들어가면서 스프링 웹 애플리케이션 개발 전반을 빠르게 학습할 수 있습니다., 스프링 학습 첫 길잡이! 개발 공부의 길을 잃지 않도록 도와드립니다. 📣 확인해주세
www.inflearn.com