Open snaag opened 1 year ago
assertThrows
로 try~catch 작성하지 않고 테스트 할 수 있음MemberService.java
public class MemberService {
private final MemberRepository memberRepository;
// 외부에서 memoryRepository 를 넣어줌 => Dependency Injection (DI)
public MemberService(MemberRepository memberRepository) {
this.memberRepository = memberRepository;
}
/**
* 회원 가입
*/
public Long join(Member member) {
validateDuplicateMember(member); // 중복 회원 검증
memberRepository.save(member);
return member.getId();
}
// control + t => 메서드 추출
private void validateDuplicateMember(Member member) {
memberRepository.findByName(member.getName())
.ifPresent(m -> {
throw new IllegalStateException("이미 존재하는 회원입니다.");
});
}
/**
* 전체 회원 조회
*/
public List<Member> findMembers() {
return memberRepository.findAll();
}
public Optional<Member> findOne(Long memberId) {
return memberRepository.findById(memberId);
}
}
MemberServiceTest.java
class MemberServiceTest {
MemoryMemberRepository memberRepository;
MemberService memberService;
@AfterEach
public void afterEach() {
memberRepository = new MemoryMemberRepository();
memberService = new MemberService(memberRepository);
}
@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");
Member member2 = new Member();
member2.setName("spring");
// when
memberService.join(member1);
// then
IllegalStateException e = assertThrows(IllegalStateException.class, () -> memberService.join(member2));
// assertThat(e.getMessage()).isEqualTo("이미 존재하는 회원입니다."); // 에러 메시지 검증
assertThrows(IllegalStateException.class, () -> memberService.join(member2)); // '오른쪽을 수행했을 때 왼쪽 예외가 발생해야 함' 을 의미
/**
try {
memberService.join(member2);
fail("예외가 발생해야 합니다.");
} catch(IllegalStateException e) {
assertThat(e.getMessage()).isEqualTo("이미 존재하는 회원입니다.");
}
*/
}
}
메서드 추출
control + t
// 따로 메서드로 분리할 코드를 블럭잡고 누르면, 알아서 함수로 만들어줌
테스트 코드 만들기
cmd + shift + T
// 테스트할 클래스에 요 키를 입력하면, 알아서 해당 함수들에 대한 테스트 껍데기를 만들어줌
package hello.hellospring.service;
import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.*;
class MemberServiceTest {
@Test
void join() {
}
@Test
void findMembers() {
}
@Test
void findOne() {
}
}