1. 회원서비스
회원리포지토리 + 비지니스 로직
2. 서비스 / 리포지토리 클래스의 네이밍
서비스 -> 비지니스에 의존적으로 접근한다. ( 개발자 / 기회작 모두가 매칭이 잘 되는 것을 보기 위해서)
리포지토리 -> 개발스럽게 만든다.
3. 회원 서비스 구현 코드
package hello.hellospring.service;
import hello.hellospring.domain.Member;
import hello.hellospring.repository.MemberRepository;
import hello.hellospring.repository.MemoryMemberRepository;
import java.util.List;
import java.util.Optional;
public class MemberService {
private final MemberRepository memberRepository = new MemoryMemberRepository();
//회원가입
public long join(Member member){
//같은 이름이 있는 중복 회원 X
validateDuplicateMember(member); //중복회원 검증
memberRepository.save(member);
return member.getId();
}
//refactoring 하는 단축키 ctrl + Alt + m (윈도우 기준)
private void validateDuplicateMember(Member member) {
memberRepository.findByName(member.getName())
.ifPresent(m ->{ //null이 아닌 값이 있으면 !! -> Optional이라서 가능
throw new IllegalStateException("이미 존재하는 회원입니다.");
} );
}
//전체 회원 조회
public List<Member> findMembers(){
return memberRepository.findAll();
}
public Optional<Member> findOne(Long memberId){
return memberRepository.findById(memberId);
}
}
4. 회원 서비스 테스트
Ctrl + Shift + t 를 누르면 테스트 케이스를 자동으로 만들어준다.
package hello.hellospring.service;
import hello.hellospring.domain.Member;
import hello.hellospring.repository.MemoryMemberRepository;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.*;
import static org.assertj.core.api.AssertionsForClassTypes.assertThat;
class MemberServiceTest {
/*테스트의 경우엔 한글로 적어도 됨
왜냐하면 영어권 사람과 일하는 것이 아니라면 직관적인
이해를 위해 한국어를 사용하고 실제 build에 사용되지
않기 때문에 한국어를 사용해도 됨*/
MemberService memberService = new MemberService(memberRepository);
MemoryMemberRepository memberRepository = new MemoryMemberRepository();
//각 테스트 실행전에 수행됨
@BeforeEach
public void beforeEach(){
memberRepository = new MemoryMemberRepository();
memberService = new MemberService(memberRepository);
}
@AfterEach //테스트케이스 실행되고 끝날 때 마다 repository 저장소를 지움 --> 순서와 상관 없이 테스트 케이스가 진행되도록 함.
public void afterEach(){
memberRepository.clearStore();
}
@Test
void 회원가입() {
//given - 어떤 데이터를
Member member = new Member();
member.setName("spring");
//when - 어떤 것을 검증하는지
Long saveId = memberService.join(member);
//then - 나와야 하는 결과
Member findMember = memberService.findOne(saveId).get();
assertThat(member.getName()).isEqualTo(findMember.getName());
}
@Test
public void 중복_회원_예외(){
//given
Member member1 = new Member();
member1.setName("spring");
//Shift + F6 => rename
Member member2 = new Member();
member2.setName("spring");
//when
memberService.join(member1);
IllegalStateException e = assertThrows(IllegalStateException.class, ()-> memberService.join(member2));
assertThat(e.getMessage()).isEqualTo("이미 존재하는 회원입니다.");
/* try {
memberService.join(member2);
} catch (IllegalStateException e){
assertThat(e.getMessage()).isEqualTo("이미 존재하는 회원입니다.");
}*/
//then
}
@Test
void findMembers() {
}
@Test
void findOne() {
}
}
'Back-End > Spring' 카테고리의 다른 글
[SpringBoot][스프링 입문] - 4.2 자바 코드로 직접 스프링 빈 등록하기 (0) | 2021.12.25 |
---|---|
[SpringBoot][스프링 입문] - 4.1 컴포넌트 스캔과 자동 의존관계 설정 (0) | 2021.12.25 |
[SpringBoot][스프링 입문] - 3.2 회원 도메인과 리포지토리 만들기 / 3.3 회원 리포지토리 테스트 케이스 작성 (0) | 2021.12.23 |
[SpringBoot][스프링 입문] - 3.1 비니지스 요구사항 정리 (0) | 2021.12.23 |
[SpringBoot][스프링 입문] - 2장 스프링 웹 개발 기초 <정리> (0) | 2021.12.21 |