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