작성한 회원 서비스가 정상적으로 작동하는지 확인하기 위해 테스트 케이스를 작성한다.
클래스에서 바로 테스트 케이스 만드는 방법!
단축키 : control + Shift + T

테스트할 메소드를 선택하고 OK 버튼을 누른다.
테스트 케이스 만들어진 모습
테스트 할 때는 직관적으로 확인하기 위해서 한글로 클래스를 작성해도 상관없다. (빌드할 때 테스트는 포함되지 않으므로!)
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 회원가입() {
        //given
        Member member = new Member();
        member.setName("hello");
        
        //when
        Long saveId = memberService.join(member);
        
        //then
        Member findMember = memberService.findOne(saveId).get();
        assertThat(member.getName()).isEqualTo(findMember.getName());
    }
    
    @Test
    public 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("이미 존재하는 회원입니다.");
}
이때, 테스트 클래스에서 멤버 리포지토리를 다시 생성하게 되면 멤버 서비스에서 사용하는 리포지토리와 서로 다른 인스턴스가 된다.
그래서 테스트 클래스에서는 멤버 리포지토리를 따로 호출하지 않고 서비스에서 상속자로 Generate한다.
private final MemberRepository memberRepository;
public MemberService(MemoryMemberRepository memberRepository) {
    this.memberRepository = memberRepository;
}
MemberServiceTest 에서 활용하는 부분
@BeforeEach
public void beforeEach() {
    memberRepository = new MemoryMemberRepository();
    MemberService memberService1 = memberService;
    memberService1 = new MemberService(memberRepository);
}
변수 추출하기 단축키 : cmd + option + v
같은 단어끼리 묶어서 리팩토링 : shift + f6
Generate : control + enter
2023.05.29 작성