이제 리포지토리에서 구현했던 기능들과, 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라는 메서드로 테스트하게 만들어두었다.
현재는 메서드가 만들어져있지 않아, 동작을 하지 않는다.
이제 회원가입 기능을 실질적으로 만들어 동작하게 해봐야겠다.
'스프링 공부 > 게시판 프로젝트 만들기' 카테고리의 다른 글
[스프링] 24. Member 데이터 변경을 비즈니스 로직에 추가하기 (0) | 2023.02.07 |
---|---|
[스프링] 23. MemberService의 registerNewMember를 만들어보자! (0) | 2023.02.06 |
[스프링] 21. MemberCustomRepository : 조회를 엔티티로 반환하는게 과연 좋을까? (0) | 2023.02.05 |
[스프링] 20. QueryDsl을 이용해 MemberCustomRepository를 더 깨끗하게!!! (0) | 2023.02.05 |
[스프링] 19. QueryDsl 넣어주기 (0) | 2023.02.05 |