728x90
중복 회원 방지
package hello.hello_spring.service;
import hello.hello_spring.domain.Member;
import hello.hello_spring.repository.MemberRepository;
import hello.hello_spring.repository.MemoryMemberRepository;
import java.util.Optional;
public class MemberService {
private final MemberRepository memberRepository = new MemoryMemberRepository();
// 회원가입 !!!!!!
public Long join(Member member) {
//같은 이름이 있는 중복 회원 X
Optional<Member> result = memberRepository.findByName(member.getName());
result.ifPresent(m -> {
throw new IllegalStateException("이미 존재하는 회원입니다.");
} );
memberRepository.save(member);
return member.getId();
}
}
- Null일 가능성이 있으면 Optional로 한 번 감싸서 반환
- Optional<Member> result = 부분을 지우고 받아줄 수도 있다.

이 코드를 메서드로 변환하려면?
control + T 단축키를 이용하여 Refactor This // Extract Method 사용

메서드명은 validateDuplicateMember로 설정해줬다.

회원 조회
// 전체 회원 조회
public List<Member> findMembers() {
return memberRepository.findAll();
}
public Optional<Member> findOne(Long memberId){
return memberRepository.findById(memberId);
}
회원 서비스 Test
이전 글에서 작성했던 테스트 케이스보다 더 용이하게 하는 방법
단축키 : command + shift + T(mac기준)

하면 이렇게 Create New Test가 뜬다.

그럼 요로코롬 뜬다.
테스트할 것들 다 체크해두고 OK버튼 누르기

그럼 이렇게 자동으로 테스트케이스 틀이 만들어진다~~~
@Test
void 회원가입() {
//given
Member member = new Member();
member.setName("hello");
//when
Long saveId = memberService.join(member);
//then(검증)
Member findMember = memberService.findOne(saveId).get();
assertThat(member.getName()).isEqualTo(findMember.getName());
}
(참고로 테스트 케이스에서 메서드명을 한글로 써도 된다.)
given/when/then 3단계로 나누어 쓰면 식별이 좀 더 용이하다.
여기까지는 일반 테스트 검증이고, 예외처리 테스트도 있다.
예외 테스트
// MemberService.java
private void validateDuplicateMember(Member member) {
memberRepository.findByName(member.getName())
.ifPresent(m -> {
throw new IllegalStateException("이미 존재하는 회원입니다.");
}); // null일 가능성이 있으면 Optional로 한 번 감싸서 반환
}
테스트하려는 파일에 이러한 IllegalStateException이 있다.
1. try / catch
// 예외 처리
@Test
public void 중복_회원_예외() {
//given
Member member1 = new Member();
member1.setName("spring");
Member member2 = new Member();
member2.setName("spring"); // 일부러 중복되게 만들어봄
//when
memberService.join(member1);
try {
memberService.join(member2);
fail("예외가 발생해야 합니다.");
} catch (IllegalStateException e){
// 예외처리성공
assertThat(e.getMessage()).isEqualTo("이미 존재하는 회원입니다.");
}
2. assertThrows(IllegalStateException.class, () -> ~~~~~~
// 예외 처리
@Test
public void 중복_회원_예외() {
//given
Member member1 = new Member();
member1.setName("spring");
Member member2 = new Member();
member2.setName("spring"); // 일부러 중복되게 만들어봄
//when
memberService.join(member1);
assertThrows(IllegalStateException.class, () -> memberService.join(member2));
IllegalStateException이 터져야함
여기서 IllegalStateException이 NullpointerException이 된다면 오류 발생.
'Coding > Spring(Boot)' 카테고리의 다른 글
| [Spring]자바 코드로 직접 spring bean 등록 (2) | 2024.06.11 |
|---|---|
| [Spring]DI(의존성 주입)와 Bean (0) | 2024.06.10 |
| [Spring]repository test case 작성 (0) | 2024.06.09 |
| [Spring]정적컨텐츠/MVC/API (2) | 2024.06.09 |
| [Spring]스프링부트 build 후 실행하기 (0) | 2024.06.09 |