service/MemberServiceTest
package com.danny.learningspring.service;
import com.danny.learningspring.domain.Member;
import com.danny.learningspring.repository.MemoryMemberRepository;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import static org.assertj.core.api.Assertions.*;
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 join() {
//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());
}
@Test
void alreadyJoinExc() {
//given
Member member1 = new Member();
member1.setName("spring");
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);
// fail();
// } catch (IllegalStateException e) {
// assertThat(e.getMessage()).isEqualTo("이미 존재하는 회원입니다.");
// }
}
}
- command+shift+T -- Test클래스와 패키지 자동생성
- option+enter -- Static import
- assertThrows(IllegalStateException.class, () -> memberService.join(member2));
- IllegalStateException.class와 중복인 값을 넣은 member2를 넣었을 때의 예외처리가 같은지
- assertThat(e.getMessage()).isEqualTo("이미 존재하는 회원입니다.");
- 예외처리가 실행되고나서 예외처리 메시지가 실제로 나와야하는 예외처리 메시지와 같은지
- controll+R(shift + F10) -- 이전 실행 메서드 실행
- @BeforeEach -- 테스트가 실행되기 전에 MemberRepository와 MemberService를 생성하는데 MemberService를 생성할 때 MemberRepository를 직접 주입 해줌으로써 같은 Repository를 쓰게 함(DI)
MemberService
@RequiredArgsConstructor
public class MemberService {
private final MemberRepository memberRepository;
// public MemberService(MemberRepository memberRepository) {
// this.memberRepository = memberRepository;
// }
- 실행 시 메서드간에 값을 초기화를 시켜줘야 하는데 실제 MemberService의 MemberRepository와 TestMemberService의 MemberRepository는 둘 다 객체 생성을 하고있기때문에 Repository가 서로 다름
- 생성자를 통해서 DI를 시켜줄 수 있음
- lombok의 @RequiredArgsConstructor를 사용하면 초기화되지않은 final에 대해 생성자를 생성해줌
'Spring 입문' 카테고리의 다른 글
스프링MVC 입문14 (0) | 2022.11.11 |
---|---|
스프링MVC 입문13 (0) | 2022.11.11 |
스프링MVC 입문11 (0) | 2022.11.10 |
스프링MVC 입문10 (0) | 2022.11.10 |
스프링MVC 입문09 (0) | 2022.11.10 |
댓글