Spring/spring_old

05./ Spring excersise-Member-02-service

slow333 2023. 1. 12. 12:34

MemberService 생성 => MemberRepository를 가지고와서 생성함

join, findMember, findId

중복회원 검증을 위해 이름을 비교해서 중복이름이 있는지 검증 후에 가입을 받음

(Optional에 담겨있어서 ifPresent 사용 가능)

public class MemberService {
  private final MemberRepository memberRepository;

  public MemberService() {
    memberRepository = new MemoryMemberRepository();
  }
  /**    회원 가입   */
  public long join(Member member){
  // 중복 이름 가입 안됨
    checkDuplicateMember(member);
    memberRepository.save(member);
    return member.getId();
  }
//  전체 회원 조회
  public List<Member> findMembers(){
    return memberRepository.findAll();
  }

  public Optional<Member> findId(Long id){
    return memberRepository.findById(id);
  }
  private void checkDuplicateMember(Member member) {
    memberRepository.findByName(member.getName())
            .ifPresent(m -> {
              throw new IllegalStateException("이미 회원이 있습니다.");
            });
  }
}

@Test 해 보기

기본 절차는 given, when, then을 통해 검증

given에서는 객체를 생성하고

when에서는 생성된 객체를 가지고 실제 적용해 보고

then에서는 원하는 결과와 같은지 검증

org.assertj.core.api.Assertions.* ===> 좀더 직관적으로 비교 할 수 있음

import com.myvms.domain.Member;
import com.myvms.repository.MemoryMemberRepository;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;

import java.util.Date;
import java.util.List;

import static org.assertj.core.api.Assertions.*;

class MemberServiceTest {

  MemberService memberService;
  MemoryMemberRepository memberRepository ;

  @AfterEach
  public void afterEach(){
    memberRepository.clearStore();
  }

  @BeforeEach
  void setUp() {
    memberRepository = new MemoryMemberRepository();
    memberService = new MemberService(memberRepository);
  }

  @Test
  void join() {
    //given
    Member member = new Member();
    member.setName("sp1");
    member.setRegDate(new Date());
    long joinId = memberService.join(member);

    Member byId = memberService.findId(joinId).get();
    assertThat(byId.getName()).isEqualTo(member.getName());
  }

  @Test
  void checkDuplicateMember(){
    Member member = new Member();
    member.setName("sp1");
    member.setRegDate(new Date());

    Member member2 = new Member();
    member2.setName("sp1");
    member2.setRegDate(new Date());

    memberService.join(member);
    IllegalStateException e = Assertions
                           .assertThrows(IllegalStateException.class, 
                           () -> memberService.join(member2));
    assertThat(e.getMessage()).isEqualTo("이미 회원이 있습니다.");

//    try {
//      memberService.join(member2);
////      fail("이미 회원이 있습니다.");
//    } catch (IllegalStateException e) {
//      assertThat(e.getMessage()).isEqualTo("이미 회원이 있습니다.000");
//    }
  }

  @Test
  void findMembers() {
    Member member = new Member();
    member.setName("sp1");
    member.setRegDate(new Date());
    memberService.join(member);

    Member member1 = new Member();
    member1.setName("sp2");
    member1.setRegDate(new Date());
    memberService.join(member1);

    List<Member> members = memberService.findMembers();
    System.out.println(members);
  }

  @Test
  void findId() {
  }
}