비즈니스 요구사항 정리

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.List;
import java.util.Optional;
public class MemberService {
// 기계적인 역할의 리포지토리와 다르게 service는 더 비즈니스적으로 개발(메서드 이름 등)
private final MemberRepository memberRepository = new MemoryMemberRepository();
// 회원가입
public Long join(Member member){
// 중복 회원x
validateDuplicateMember(member);
memberRepository.save(member);
return member.getId();
}
private void validateDuplicateMember(Member member) {
Optional<Member> result = memberRepository.findByName(member.getName());
result.ifPresent(m -> { //만약 result가 있으면 (Optional의 메소드)
throw new IllegalStateException("이미 존재하는 회원입니다."); //중복회원이라는 예외 던져줌
});
}
// 전체 회원 조회
public List<Member> findMembers(){
return memberRepository.findAll();
}
// 회원 한명 조회
public Optional<Member> findOne(Long memberId){
return memberRepository.findById(memberId);
}
}
➡️ service 패키지에 비즈니스 요구사항 반영하여 MemberService 개발


➡️ 로직 입력시 길어져 메서드로 따로 빼고 싶으면 해당 부분 드래그해서 Extract Method 선택
회원 서비스 테스트


➡️테스트가 필요한 클래스 드래그해서 Ctrl + Shift + T >> Create Test창 >> Member 체크하고 OK


➡️자동으로 test에 패키지와 테스트 클래스 생성
package hello.hello_spring.service;
import hello.hello_spring.domain.Member;
import hello.hello_spring.repository.MemoryMemberRepository;
import org.assertj.core.api.Assertions;
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.*;
class MemberServiceTest {
MemberService memberService;
MemoryMemberRepository memberRepository;
@BeforeEach
public void beforeEach(){
memberRepository = new MemoryMemberRepository();
memberService = new MemberService(memberRepository);
}
@AfterEach
public void afterEach(){
memberRepository.clearStore();
}
@Test //정상플로우
void 회원가입() { //given - when - then 문법 : 어떤 상황이 주어져서 실행했을때 이러한 결과가 나와야 함
//given
Member member = new Member();
member.setName("hello");
//when
Long saveId = memberService.join(member);
//then
Member findMember = memberService.findOne(saveId).get();
Assertions.assertThat(member.getName()).isEqualTo(findMember.getName());
}
@Test //예외시
public void 중복_회원_예외(){
//given
Member member1 = new Member();
member1.setName("spring");
Member member2 = new Member();
member2.setName("spring"); // name 중복
//when
memberService.join(member1);
IllegalStateException e = assertThrows(IllegalStateException.class, () -> memberService.join(member2));
//member2를 join하면 IllegalStateException예외가 터져야 함
Assertions.assertThat(e.getMessage()).isEqualTo("이미 존재하는 회원입니다.");
//예외 메세지가 맞는지 확인
/*
try-cahtc문을 통한 확인방법
try {
memberService.join(member2); // 중복 회원 예외가 일어나야 함
fail();
} catch(IllegalStateException e){
// 예외가 일어나 메세지가 "이미 존재하는 회원입니다"와 같다면 정상 작동
Assertions.assertThat(e.getMessage()).isEqualTo("이미 존재하는 회원입니다.");
}
*/
//then
}
@Test
void findMembers() {
}
@Test
void findOne() {
}
}
'프로그래밍 > - Spring' 카테고리의 다른 글
| [ 회원 관리 예제 - 웹 MVC 개발 ] 회원 웹기능 - 홈 화면 추가 / 등록 / 조회 (1) | 2025.02.04 |
|---|---|
| [ 스프링 빈과 의존관계 ] 컴포넌트 스캔과 자동 의존관계 설정 / 자바 코드로 직접 스프링 빈 등록하기 (1) | 2025.01.24 |
| [ 회원 관리 예제 - 백엔드 개발 ] 비즈니스 요구사항 정리 / 회원 도메인과 리포지토리 만들기 / 회원 리포지토리 테스트 케이스 작성 (1) | 2025.01.22 |
| [ 스프링 웹 개발 기초 ] 정적 컨텐츠 / MVC와 템플릿 엔진 / API (3) | 2025.01.21 |
| [ 프로젝트 환경설정 ] 프로젝트 생성 / 라이브러리 살펴보기 / View 환경설정 / 빌드하고 실행하기 (2) | 2025.01.15 |