작성한 회원 서비스가 정상적으로 작동하는지 확인하기 위해 테스트 케이스를 작성한다.
클래스에서 바로 테스트 케이스 만드는 방법!
단축키 : 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 작성