[3-5] 회원 서비스 테스트

ohun·2022년 5월 31일
0

Spring 입문

목록 보기
11/16

MemberServiceTest

test.java.hello.hellospring.service 아래에 테스트 클래스를 생성한다.

package hello.hellospring.service;

import hello.hellospring.domain.Member;
import hello.hellospring.repository.MemoryMemberRepository;
import org.junit.jupiter.api.*;

import java.util.Optional;

import static org.assertj.core.api.Assertions.assertThat;
import static org.junit.jupiter.api.Assertions.*;

class MemberServiceTest {

    MemberService memberService;
    MemoryMemberRepository memberRepository;

    @BeforeEach
    public void beforeEach() {
        memberRepository = new MemoryMemberRepository();    // 각 테스트를 시작하기 전에 memoryMemberRepository를 만들어 이걸 memberRepository에 넣어놓고
        memberService = new MemberService(memberRepository);    // 이러한 memberRepository를 memberService 에 잘 넣어준다. 결과적으로 같은 memoryMemberRepository가 사용됨.
    }

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

    @Test
    void 회원가입() {
        //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
    void 중복_회원_예외() {
        //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("이미 존재하는 회원입니다.");

        /*try {
            memberService.join(member2);
            fail();
        } catch (IllegalStateException e) {
            assertThat(e.getMessage()).isEqualTo("이미 존재하는 회원입니다.123456"); // join 에서의 메시지와 비교
        }*/

    }
}
// MemberService.java 수정

private final MemberRepository memberRepository;

    public MemberService(MemberRepository memberRepository) {
        this.memberRepository = memberRepository;
    }
  • 테스트 설계
    • given, when, then 을 놓고 설계하기!
    • 테스트는 한글로 메소드 이름 작성 가능

DI(Dependency Injection)

  • memberService 파일에서 기존 new 로 새로 생성하는 방식 대신 외부에서 받는 것으로 위와 같이 코드 수정.
  • @BeforeEach : 각 테스트 실행 전에 호출된다. 테스트가 서로 영향이 없도록 항상 새로운 객체를 생성하고, 의존관계도 새로 맺어준다.
  • 테스트 시작 전 설정 어노테이션을 MemberServiceTest 파일에 추가하고,
  • 각 테스트를 시작하기 전에 memoryMemberRepository 를 만들어서 이걸 memberRepository 에 넣어놓고,
  • 이러한 memberRepository 를 memberService 에 넣어준다.
  • 결과적으로 같은 memoryMemberRepository 가 사용됨.
  • 이것을 Dependency Injection, 의존성 주입이라고 한다.
profile
공부 중입니다.

0개의 댓글