Spring - 서비스 & 테스트
2022. 9. 14. 16:35
서비스에서는 핵심 비즈니스 로직들이 구현됩니다.
마찬가지로 service 의 위치에 class 를 만듭니다.
private final MemberRepository memberRepository;
멤버 리퍼지토리를 들고와 새로운 리퍼지토리를 생성합니다.
회원가입
public long join(Member member){
validateDuplicateMember(member); // 중복 회원 검증
memberRepository.save(member);
return member.getId();
}
중복 회원 검증을 하고, 리포지토리에 저장을 합니다.
회원가입을 하고 나서는 Id를 return 하게 됩니다.
private void validateDuplicateMember(Member member) {
memberRepository.findByName(member.getName())
.ifPresent(m -> {
throw new IllegalStateException("이미 존재하는 회원입니다.");
});
}
위에서 사용한 중복 회원 함수입니다. 리포지토리에서 동일한 이름이 있다면 ?
stateException 을 반환합니다.
public List<Member> findMembers(){
return memberRepository.findAll();
}
public Optional<Member> findOne(Long memberId){
return memberRepository.findById(memberId);
}
전체 조회와 개인 조회를 만들어 줍니다.
서비스 테스트
테스트를 쉽게 만드는 방법이 있습니다 .
cmd + shift + T 를 이용해 새 테스트를 만들어 주게 되면 자동으로 틀을 잡아줍니다.
하지만 이 서비스는 테스트를 할때마다 새로운 리포지토리에서 진행해야 합니다.
public MemberService(MemberRepository memberRepository){
this.memberRepository = memberRepository;
}
service에 새로운 함수를 추가합니다. 서비스만의 리포지토리를 새롭게 정의하겠다는 함수입니다.
MemberService memberService ;
MemoryMemberRepository memberRepository;
@BeforeEach
public void beforeEach(){
memberRepository = new MemoryMemberRepository();
memberService = new MemberService(memberRepository);
}
@BeforeEach 를 통해 함수 진행 전에 새로운 리포지토리로 초기화를 해줍니다.
회원가입
void 회원가입() {
//given
Member member = new Member();
member.setName("spring1");
// when
Long saveId = memberService.join(member);
// then
Member findMember = memberService.findOne(saveId).get();
Assertions.assertThat(findMember.getName()).isEqualTo(member.getName());
}
given when then
3단 문법을 이용해 테스트 케이스를 적으면 형식을 맞출 수 있습니다.
어떤 인스턴스를 사용하며, 어떤 행동을 하게되면, 어떤 결과를 보여주는지 순서로 진행됩니다.
@Test
public void 중복_회원_예외(){
// given
Member member1 = new Member();
member1.setName("spring1");
Member member2 = new Member();
member2.setName("spring1");
// when
memberService.join(member1);
// ()-> 이 행동을 할때 , 앞의 예외가 터져야 한다. => 터지면 통과
assertThrows(IllegalStateException.class, () -> memberService.join(member2)))
}
중복 확인을 하는 테스트입니다. 똑같은 이름으로 두명이 회원가입을 하려고 할때,
ExceptionError 가 뜨면 성공인 경우를 구현했습니다.
assertThrows ( 결과, 원인 )이 참인지 확인하는 것으로 , ()->행동 이 원인이 되고 stateException이 결과가 됩니다.
'Spring' 카테고리의 다른 글
Spring - repository 테스트 (0) | 2022.09.14 |
---|---|
Spring - 도메인 & 리포지토리 만들기 (0) | 2022.09.14 |
Spring - 응답방법 (0) | 2022.09.14 |
첫 Spring (0) | 2022.09.14 |