Member에 대한 테스트를 만들어보아야 겠다.
일단, Member 생성자에 RegisterRequestDto를 넣을 것이다.
그러기 위해, 테스트를 위한 RegisterRequestDto를 생성하주자.
private RegisterRequestDto makeTestRegister(){
return new RegisterRequestDto("username", "nickname", "email@email.com"
, "password", "password");
}
AllArgsConstructor로 모든 인스턴스를 넣은 Dto를 만들었다.
이를 @Builder를 이용해 조금 더 깔끔하게 만들어보았다.
@AllArgsConstructor
@Data
@Builder
public class RegisterRequestDto
이런식으로 @Builder를 넣어
private RegisterRequestDto makeTestRegister(){
return RegisterRequestDto.builder()
.username("username")
.nickname("nickname")
.email("email@email.com")
.password("password")
.passwordCheck("password")
.build();
}
이런식으로 코드를 수정할 수 있다.
// 회원가입 테스트
@Test
@DisplayName("회원가입상의 문제가 없을 경우, 회원가입이 진행된다. ")
void registerTest(){
assertThatThrownBy(()->new Member(makeTestRegister()))
.doesNotThrowAnyException();
}
@Test
@DisplayName("이메일 형식이 올바르지 않을 경우 예외처리된다. ")
void notRightEmailFormat(){
RegisterRequestDto registerRequestDto = makeTestRegister();
registerRequestDto.setEmail("wrongEamail");
assertThatThrownBy(()-> new Member(registerRequestDto))
.isInstanceOf(EmailNotFormatException.class);
}
@Test
@DisplayName("비밀번호와 비밀번호 확인이 다를 경우 회원가입에 예외가 발생된다.")
void notSamePasswordRegister(){
RegisterRequestDto test = makeTestRegister();
test.setPasswordCheck("wrong");
assertThatThrownBy(()-> new Member(test))
.isInstanceOf(PasswordNotMatchingException.class);
}
아직 Member 도메인에 대한 테스트를 만드는 중이기 때문에, repository에서 데이터를 가져와 테스트하는 과정을 추가하진 않았다.(서비스에서 추가 예정)
회원가입시에 확인할 수 있는 경우는, 이메일 형식과 비밀번호 일치 여부이기 때문에 이에 대한 예외를 처리했다.
// 닉네임 변경 테스트
@Test
@DisplayName("닉네임을 수정하면, 변경된 닉네임이 나온다. ")
void changeNicknameTest(){
Member member = new Member(makeTestRegister());
member.changeNickname(new ChangeNicknameRequestDto("newNickname"));
assertThat(member.getNickname()).isEqualTo("newNickname");
}
@Test
@DisplayName("기존의 닉네임으로 닉네임을 수정하면 예외처리된다.")
void changeSameNickname(){
Member member = new Member(makeTestRegister());
assertThatThrownBy(()->member.changeNickname(new ChangeNicknameRequestDto("nickname")))
.isInstanceOf(NicknameAlreadyInUseException.class);
}
닉네임을 수정할 경우, 수정된 닉네임으로 인스턴스가 초기화되어 불러올 시에도 바뀐 값으로 나오는지 확인하는 테스트이다.
기존의 닉네임으로 바꿀 경우 예외처리시켰다.
// 이메일 변경 테스트
@Test
@DisplayName("이메일을 수정하면, 변경된 이메일이 나온다. ")
void changeEmailTest(){
Member member = new Member(makeTestRegister());
member.changeEmail(new ChangeEmailRequestDto("newEmail@email.com"));
assertThat(member.getNickname()).isEqualTo("newEmail@email.com");
}
@Test
@DisplayName("기존의 이메일로 이메일을 수정하면 예외처리된다. ")
void changeSameEmail(){
Member member = new Member(makeTestRegister());
assertThatThrownBy(()->member.changeEmail(new ChangeEmailRequestDto(member.getEmail())))
.isInstanceOf(EmailAlreadyInUseException.class);
}
@Test
@DisplayName("수정하려는 이메일의 형식이 올바르지 않으면 예외처리한다. ")
void emailNotFormat(){
Member member = new Member(makeTestRegister());
assertThatThrownBy(()->member.changeEmail(new ChangeEmailRequestDto("wrong")))
.isInstanceOf(EmailNotFormatException.class);
}
이메일은 기존과 같을 때, 형식이 맞지 않을 때, 정상적으로 변경 가능 할 때 3가지 경우가 있기에 이에 대한 테스트를 추가했다.
@Test
@DisplayName("비밀번호를 정상적으로 수정하면, 성공되고, 로그인시 다른 비밀번호로 로그인해야한다. ")
void changePasswordTest(){
Member member = new Member(makeTestRegister());
ChangePasswordRequestDto changePasswordRequestDto = new ChangePasswordRequestDto("newP", "newP");
assertThatThrownBy(()-> member.changePassword(changePasswordRequestDto))
.doesNotThrowAnyException();
}
@Test
@DisplayName("비밀 번호수정시, 두번 쓴 비밀번호가 서로 다르면 예외처리한다. ")
void passwordNotMatch(){
Member member = new Member(makeTestRegister());
ChangePasswordRequestDto changePasswordRequestDto = new ChangePasswordRequestDto("newP", "mextP");
assertThatThrownBy(()-> member.changePassword(changePasswordRequestDto))
.isInstanceOf(PasswordNotMatchingException.class);
}
@Test
@DisplayName("비밀번호가 이전에 사용하던 비밀번호와 같으면 예외처리한다.")
void passwordFormalSame(){
Member member = new Member(makeTestRegister());
ChangePasswordRequestDto changePasswordRequestDto = new ChangePasswordRequestDto("password", "password");
assertThatThrownBy(()-> member.changePassword(changePasswordRequestDto))
.isInstanceOf(PasswordNotChangedException.class);
}
비밀번호는 서로 같지 않을 때, 이전과 같을 때, 정상변경 가능할 때 3가지를 테스트로 만들었다.
public Member(RegisterRequestDto registerRequestDto){
}
public void changeNickname(ChangeNicknameRequestDto changeNicknameRequestDto){
}
private boolean isNicknameSameWithFormal(ChangeNicknameRequestDto changeNicknameRequestDto){
return false;
}
public void changeEmail(ChangeEmailRequestDto changeEmailRequestDto){
}
private boolean isEmailSameWithFormal(ChangeEmailRequestDto changeEmailRequestDto){
return false;
}
public void changePassword(ChangePasswordRequestDto changePasswordRequestDto){
}
private boolean isPasswordNotSame(ChangePasswordRequestDto changePasswordRequestDto){
return false;
}
private boolean isPasswordSameWithFormal(ChangePasswordRequestDto changePasswordRequestDto){
return false;
}
private boolean isPasswordOutdated(){
return false;
}
이에 대한 실패하는 메서드를 만들었다.
이제 이를 하나씩 작동시키는 과정을 정리해야겠다.
'스프링 공부 > 게시판 프로젝트 만들기' 카테고리의 다른 글
[스프링] 16. MemberRepository 만들기 (0) | 2023.02.02 |
---|---|
[스프링] 15. Member 테스트대로 코드 짜보기 (0) | 2023.01.17 |
[스프링] 13. Member 엔티티 만들기 (0) | 2023.01.11 |
[스프링] 12. Member 엔티티에 대해 생각해보기 (0) | 2023.01.11 |
[스프링] 11. BaseEntity를 만들어보자. (0) | 2023.01.09 |