Spring 입문 회원 서비스 개발 및 테스트

1c2·2023년 8월 21일
0

Spring 입문

목록 보기
7/16

저번에 만든 레파지토리를 사용하여 회원 서비스를 만들기 위해 service 디렉토리를 생성하였다. 멤버 서비스는 다음과 같이 구현한다.


@Service
public class MemberService {
    private final MemberRepository memberRepository;
    @Autowired //DI로 repository필요하구나 -> 연결
    public MemberService(MemberRepository memberRepository) { //생성자 -> member repostiory를 인자로 받음 
        this.memberRepository = memberRepository; //dependency injection
    }
    /**
     *
     회원가입
     */
    public Long join(Member member) {
        validateDuplicateMember(member); //중복 회원 검증
        memberRepository.save(member);
        return member.getId();
    }
    private void validateDuplicateMember(Member member) { //단축키 ctrl+t로 
        memberRepository.findByName(member.getName()) //이름 검색
                .ifPresent(m -> { //만약 (같은 이름이)있으면
                    throw new IllegalStateException("이미 존재하는 회원입니다.");//예외 처리
                });
    }
    /**
     *
     전체 회원 조회
     */
    public List<Member> findMembers() {
        return memberRepository.findAll();
    }
    public Optional<Member> findOne(Long memberId) {
        return memberRepository.findById(memberId);
    }
}

멤버 서비스의 기능은 간단하게 회원 가입 및 중복 회원 검출, 전체 회원 조회, id로 멤버 검색이다. 해당 서비스가 잘 돌아가는데 테스트 코드를 작성하였다. 위에서 만든 멤버 서비스에서 ctrl + shift + t -> create new test를 눌러 테스트 코드의 틀을 쉽게 만들 수 있다. 이후 테스트코드를 작성하자.


class MemberServiceTest {
    MemberService memberService;
    MemoryMemberRepository memberRepository;
    @BeforeEach
    public void beforeEach() {
        memberRepository = new MemoryMemberRepository();//멤버 레파지토리 생성
        memberService = new MemberService(memberRepository); //멤버 서비스 생성/dependency injection
    }
    @AfterEach
    public void afterEach() {
        memberRepository.clearStore(); //레파지토리를 비운다. 
    }
    @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());
    }
    @Test
    public void 중복_회원_예외() throws Exception {
        //Given
        Member member1 = new Member();
        member1.setName("spring");
        Member member2 = new Member();
        member2.setName("spring");
        //When
        memberService.join(member1);
        IllegalStateException e = assertThrows(IllegalStateException.class,
                () -> memberService.join(member2));//예외가 발생해야 한다.
        assertThat(e.getMessage()).isEqualTo("이미 존재하는 회원입니다.");
    }
}

테스트 코드의 경우 함수 이름에 한글이 들어가도 상관이 없고 더 직관적이기 때문에 한글 이름으로 작성하는게 효율적이다. 모든 케스트가 정상적으로 동작하는 것을 확인할 수 있다.

0개의 댓글