[Spring]회원관리_회원 서비스

김피자·2023년 2월 1일
0

Spring

목록 보기
9/30
post-thumbnail
  • 비즈니스 요구사항
  • 회원 도메인과 리포지토리 만들기
  • 회원 리포지토리 테스트 케이스 작성**
  • 회원 서비스 개발
  • 회원 서비스

회원 서비스 클래스를 테스트 해볼거임
이전 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도 수정

profile
제로부터시작하는코딩생활

0개의 댓글