본문 바로가기
개발/Spring

[스프링 입문] 스프링 회원관리 예제 - 4. 회원 서비스 개발 및 테스트

by ujin2021 2021. 6. 29.

* 인프런 김영한님의 '스프링 입문' 강의를 듣고 작성한 내용입니다! (https://inf.run/txXC)

 

서비스 : 핵심 비즈니스 로직 구현 (name은 중복이 안되고,...)

회원 서비스 개발

1. hello.hellospring/service (package생성)

2. service/MemberService.java (java 파일 생성)

[MemberService.java 소스코드]

 

 

 

 

 

  • Repository로 MemoryRepository 객체 사용
  • 회원가입시 name이 중복되면 안되므로 validateDuplicateMember 함수를 만들어준다

 

회원 서비스 테스트

  • repository 테스트 케이스 작성 시 일일히 코드를 쳤지만, test할 class에서 ctrl + shift + T 단축키로 Test를 생성할 수 있다
  • 이전에 MemberService.java 소스코드에서 회원 서비스가 회원 repository를 직접 생성했다
  • priavate final MemberRepository memberRepository = new MemmoryMemberRepository();
  • 회원 서비스 코드에서 DI(Dependency Injection) 를 가능하게 변경한다
  • private final MemberRepository memberRepository;
    
    public MemberService(MemberRepository memberRepository) {
            this.memberRepository = memberRepository;
    }

=> 왜 DI가 가능하게 만들어주는가? Test 코드를 짤 때 각 테스트마다 repository 객체를 생성하므로 서로 다른 DB가 생성되게 된다. 따라서 같은 객체를 쓰게 하기 위해 contructor로 생성해서 repository를 외부에서 넣어줄 수 있도록 한다.

 

[MemberServiceTest.java 소스코드]

package hello.hellospring.service;
import hello.hellospring.domain.Member;
import hello.hellospring.repository.MemoryMemberRepository;
import org.assertj.core.api.Assertions;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import static org.assertj.core.api.AssertionsForClassTypes.assertThat;
import static org.junit.jupiter.api.Assertions.assertThrows;
import static org.junit.jupiter.api.Assertions.fail;
class MemberServiceTest {
MemberService memberService;
MemoryMemberRepository memberRepository;
@BeforeEach
public void beforeEach() {
memberRepository = new MemoryMemberRepository();
memberService = new MemberService(memberRepository);
}
@AfterEach
public void afterEach() {
memberRepository.clearStore();
}
@Test
void join() {
// given
Member member = new Member();
member.setName("spring");
// when
Long saveId = memberService.join(member);
// then
Member findMember = memberService.findOne(saveId).get();
assertThat(member.getName()).isEqualTo(findMember.getName());
}
@Test
public void duplicated_exception() {
// given
Member member1 = new Member();
member1.setName("spring");
Member member2 = new Member();
member2.setName("spring"); // member2는 join 되면 안됨
// when
memberService.join(member1);
IllegalStateException e = assertThrows(IllegalStateException.class, () -> memberService.join(member2));
// then
assertThat(e.getMessage()).isEqualTo("이미 존재하는 회원입니다.");
}
@Test
void findMembers() {
}
@Test
void findOne() {
}
}