Spring - 서비스 & 테스트

2022. 9. 14. 16:35

서비스에서는 핵심 비즈니스 로직들이  구현됩니다.

마찬가지로 service 의 위치에 class 를 만듭니다.

private final MemberRepository memberRepository;

멤버 리퍼지토리를 들고와 새로운 리퍼지토리를 생성합니다.

 

회원가입

public long join(Member member){
    validateDuplicateMember(member); // 중복 회원 검증
    memberRepository.save(member);
    return member.getId();
}

중복 회원 검증을 하고, 리포지토리에 저장을 합니다.

회원가입을 하고 나서는 Id를 return 하게 됩니다.

private void validateDuplicateMember(Member member) {
    memberRepository.findByName(member.getName())
        .ifPresent(m -> {
            throw new IllegalStateException("이미 존재하는 회원입니다.");
        });
}

위에서 사용한 중복 회원 함수입니다.  리포지토리에서 동일한 이름이 있다면 ?

stateException 을 반환합니다. 

 

public List<Member> findMembers(){
    return memberRepository.findAll();
}
public Optional<Member> findOne(Long memberId){
    return memberRepository.findById(memberId);
}

전체 조회와 개인 조회를 만들어 줍니다.

 

 

서비스 테스트 

테스트를 쉽게 만드는 방법이 있습니다 .

cmd + shift + T 를 이용해 새 테스트를 만들어 주게 되면 자동으로 틀을 잡아줍니다. 

 

하지만 이 서비스는 테스트를 할때마다 새로운 리포지토리에서 진행해야 합니다. 

public MemberService(MemberRepository memberRepository){
    this.memberRepository = memberRepository;
}

service에 새로운 함수를 추가합니다. 서비스만의 리포지토리를 새롭게 정의하겠다는 함수입니다.

 

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

@BeforeEach 를 통해 함수 진행 전에 새로운 리포지토리로 초기화를 해줍니다.

 

회원가입

void 회원가입() {
    //given
    Member member = new Member();
    member.setName("spring1");
    // when
    Long saveId = memberService.join(member);
    // then
    Member findMember = memberService.findOne(saveId).get();
    Assertions.assertThat(findMember.getName()).isEqualTo(member.getName());
}

given when then 

3단 문법을 이용해 테스트 케이스를 적으면 형식을 맞출 수 있습니다.

어떤 인스턴스를 사용하며, 어떤 행동을 하게되면, 어떤 결과를 보여주는지 순서로 진행됩니다.

 

 

@Test
public void 중복_회원_예외(){
    // given
    Member member1 = new Member();
    member1.setName("spring1");

    Member member2 = new Member();
    member2.setName("spring1");

    // when
    memberService.join(member1);
    // ()-> 이 행동을 할때 , 앞의 예외가 터져야 한다. => 터지면 통과
    assertThrows(IllegalStateException.class, () -> memberService.join(member2)))
}

중복 확인을 하는 테스트입니다. 똑같은 이름으로 두명이 회원가입을 하려고 할때, 

ExceptionError 가 뜨면 성공인 경우를 구현했습니다.

 

assertThrows ( 결과, 원인 )이 참인지 확인하는 것으로 , ()->행동 이 원인이 되고 stateException이 결과가 됩니다. 

'Spring' 카테고리의 다른 글

Spring - repository 테스트  (0) 2022.09.14
Spring - 도메인 & 리포지토리 만들기  (0) 2022.09.14
Spring - 응답방법  (0) 2022.09.14
첫 Spring  (0) 2022.09.14

+ Recent posts