스프링 공부/게시판 프로젝트 만들기

[스프링] 22. MemberService의 테스트 : 회원가입 만들기

장아장 2023. 2. 6. 19:35

이제 리포지토리에서 구현했던 기능들과, Member 도메인 로직을 이용해, 멤버의 서비스를 구현할 것이다. 

도메인 로직과 리포지토리의 기능들을 이용해, 실제 멤버가 동작해야 할 비즈니스 로직을 만들어볼 것이다. 

 

구조를 생각해보기 위해 회원가입을 생각해보자. 

  • 입력을 받는다. 
  • 중복 계정을 조회한다. 
  • 중복 닉네임을 조회한다. 
  • 중복 이메일을 조회한다. 
  • 비밀번호를 2번 입력받았을 때 이를 확인한다. 
  • 비밀번호를 암호화 시켜준다. 
  • 입력으로 Member를 생성해준다. 
  • MemberRepository.save해준다. 

이런 방식으로 이루어진다. 

그렇다면, 회원가입을 했을 때 문제가 생길 결과는 무엇일까?

  • 입력값이 다른 회원과 중복될 때, 예외처리된다(아이디, 닉네임, 이메일 예외를 모두 따로 설정해준다)
  • 비밀번호 입력이 서로 다를 시, 예외처리해준다. 
  • 정상적으로 동작한다. 

이렇게 3가지의 결과가 나온다. 

이번엔 이러한 결과값의 테스트를 만들어두고, 이게 동작하게 로직을 만들어줄 것이다. 

 

일단 비교군을 만들기 위해 BeforeEach로 멤버 회원가입을 몇번 시켜주겠다. 

@BeforeEach
void initData(){
    for(int index = 1; index <=10; index++){
        RegisterRequestDto registerRequestDto = RegisterRequestDto.builder()
                .username("testUser" + index)
                .nickname("test" + index)
                .email("test"  + index + "@test.com")
                .password("테스트" + index)
                .passwordCheck("테스트" + index)
                .build();
        memberService.registerNewMember(registerRequestDto);
    }
}

 

이후, 위에서 정리한 각 경우의 테스트코드를 만들었다. 

  • 아이디 중복
  • 닉네임 중복
  • 이메일 중복
  • 비밀번호 불일치
  • 정상 동작

이렇게 5가지를 만들었는데 하나만 보여주자면, 

@Test
@DisplayName("회원가입_아이디 중복")
public void 아이디_중복() throws Exception{
    //given
    RegisterRequestDto registerRequestDto = RegisterRequestDto.builder()
            .username("testUser1")
            .nickname("아장아장")
            .email("jangajang@email.com")
            .nickname("아장아장")
            .password("아장아장")
            .passwordCheck("아장아장")
            .build();
    //when

    //then
    assertThatThrownBy(()-> memberService.registerNewMember(registerRequestDto))
            .isInstanceOf(UsernameAlreadyInUseException.class);
}

이런식으로 회원가입 요청 dto를 만들어두고, 이를 registerNewMember라는 메서드로 테스트하게 만들어두었다.

현재는 메서드가 만들어져있지 않아, 동작을 하지 않는다. 

이제 회원가입 기능을 실질적으로 만들어 동작하게 해봐야겠다.