- 비즈니스 요구사항
- 회원 도메인과 리포지토리 만들기
- 회원 리포지토리 테스트 케이스 작성**
- 회원 서비스 개발
- 회원 서비스
회원 서비스 클래스를 테스트 해볼거임
이전 3번째 글 방식에서는 테스트에 패키지를 만들고 직접 작성을 했지만
사실 더 쉬운 방법이 있음 ㅎㅎ
command
+shift
+T
자동으로 만들어졌음
@Test
void 회원가입() {
//given : 이게 주어지고
Member member = new Member();
member.setName("spring");
//when : 이걸 실행하면
Long saveId = memberService.join(member);
//then : 이게 나와야해
Member findMember = memberService.findOne(saveId).get();
// Assertions.assertThat(member.getName()).isEqualTo(findMember.getName()); > static import : option + enter
assertThat(member.getName()).isEqualTo(findMember.getName());
}
하지만! 중복 회원 검열이 잘 되는지 확인해야함
@Test
public void 중복_회원_예외(){
//given
//1번 회원 이름도 spring
Member member1 = new Member();
member1.setName("spring");
//2번 회원 이름도 spring
Member member2 = new Member();
member2.setName("spring");
//when
memberService.join(member1);
/* 방법 1
try {
memberService.join(member2);
// 위 코드가 실행되고 이 다음줄로 내려오면 실패인거임
fail();
}catch (IllegalStateException e){
assertThat(e.getMessage()).isEqualTo("이미 존재하는 회원입니다");
}
*/
// 방법 2 : 권장
IllegalStateException e = assertThrows(IllegalStateException.class, () -> memberService.join(member2));
assertThat(e.getMessage()).isEqualTo("이미 존재하는 회원입니다");
//then
}
class MemberServiceTest {
MemberService memberService = new MemberService();
MemoryMemberRepository memberRepository = new MemoryMemberRepository();
이렇게 테스트에서 new로 다른 객체의 레포지토리(MemoryMemberRepository)를 생성해 사용하면 문제가 발생할 수 있음
class MemberServiceTest {
MemberService memberService;
MemoryMemberRepository memberRepository;
// MemoryMemberRepository를 생성해 가져오면 문제가 생길 수 있음
// 이미 MemberService에서 memoryMemberRepository를 선언하여 사용중이기때문(?)
// 테스트를 실행하면 각 테스트마다 같은 MemmoryMemberRepository에 넣어줌
@BeforeEach
public void beforeEach(){
memberRepository = new MemoryMemberRepository();
memberService = new MemberService(memberRepository);
}
@AfterEach
public void afterEach(){
memberRepository.clearStore();
}
BeforeEach를 통해 각 테스트를 실행하기 전 메소드를 수행하도록 작성
MemberService도 수정