728x90
1. 편하게 Test 생성 하는법
Class 에서 단축키 Ctrl + Shift + T
를 누르면 새 테스트 생성 가능
테스트 하고 싶은 멤버변수를 체크 후 확인을 누르면 손쉽게 @Test 껍데기가 만들어진다.
@Test는 한글이름으로 적어줘도 상관없다.
2. Given - When - Then 패턴으로 @Test 채워넣기
- Given : 뭔가가 주어져
- When : 실행했을 때
- Then : 이러한 결과가 나와야 한다.
- 회원가입 (정상 플로우)
MemberService memberService = new MemberService();
@Test
void 회원가입() {
//given-when-then 문법
//given
Member member = new Member();
member.setName("kim");
//when :memberService.join 에 member 객체를 넣어서 검증하여
// saveId로 리턴 (저장한 ID가 나옴)
Long saveId = memberService.join(member);
//then
Member findMember = memberService.findOne(saveId).get();
Assertions.assertThat(member.getName()).isEqualTo(findMember.getName());
}
- Assertions.assertThat(member.getName()).isEqualTo(findMember.getName());
에서
static import로 넘기는 단축키 alt+enter 를 눌러준다.
그 후 테스트를 돌려보면 아래와 같이 녹색 불이 뜬다.
- 회원가입 (예외 플로우)
1. try-catch 를 사용하는 방법
@Test
public void 중복_회원_예외(){
//중복회원 저장
//given
Member member1 = new Member();
member1.setName("Lee");
Member member2 = new Member();
member2.setName("Lee");
//when
memberService.join(member1);
try {
memberService.join(member2);// 이름이 같기 때문에 예외가 터져야함
fail();
} catch (IllegalAccessError e){
//예외가 터져서 정상적으로 실행 됨.
//then
assertThat(e.getMessage()).isEqualTo("이미 존재하는 회원입니다.");
}
}
2. IllegalStateException 사용
@Test
public void 중복_회원_예외(){
//중복회원 저장
//given
Member member1 = new Member();
member1.setName("Lee");
Member member2 = new Member();
member2.setName("Lee");
//when
memberService.join(member1);
//memberService.join(member2) 를 태울 때 IllegalStateException.class 예외가 터지는 것을 기대한다.
//assertThrows(IllegalStateException.class, () -> memberService.join(member2));
//만약 nullpointException 을 하는 경우 테스트 실패
// 위 코드에서 ctrl + alt + v
IllegalStateException e = assertThrows(IllegalStateException.class, () -> memberService.join(member2));
assertThat(e.getMessage()).isEqualTo("이미 존재하는 회원입니다.");
}
3. Clear 해주기
위 코드에서 Test를 돌릴 때 회원가입의 아이디와 중복확인 아이디가 같은 경우 예외가 발생
→ DB에 계속 값이 쌓이기 때문
그렇기 때문에 Clear를 해 주어야 한다.
//clear를 위해 추가
MemoryMemberRepository MemberRepository = new MemoryMemberRepository();
@AfterEach
public void afterEach(){
MemberRepository.clearstore();
}
memberService에서 사용하는 MemoryMemberRepository와 테스트 케이스에서 사용하는 MemoryMemberRepository의 Repository가 달라 문제가 생길 수 있기 때문에 같은 인스턴스로 테스트 할 수 있도록 아래와 같이 수정한다.
MemberService.class
public class MemberService {
private final MemberRepository memberRepository ;
//직접 new 하여 생성하지 않고 외부에서 넣어주도록 바꾼다.
public MemberService(MemberRepository memberRepository) {
this.memberRepository = memberRepository;
}
MemberServiceTest.class
class MemberServiceTest {
MemberService memberService;
MemoryMemberRepository MemberRepository;
//동작 전 실행
@BeforeEach
public void beforeEach(){
MemberRepository = new MemoryMemberRepository();
memberService = new MemberService(MemberRepository);
}
//동작 후 실행
@AfterEach
public void afterEach(){
MemberRepository.clearStore();
}
728x90
'Java > [인프런] Spring 강의' 카테고리의 다른 글
[SpringBoot] #14 - 자바 코드로 직접 스프링 빈 등록하기 (0) | 2023.08.22 |
---|---|
[SpringBoot] #13 - 컴포넌트 스캔과 자동 의존관계 설정 (0) | 2023.08.19 |
[SpringBoot] intellij Spring Boot 단축키 (수정중) (0) | 2023.08.16 |
[SpringBoot] #11 - 회원 서비스 개발 (0) | 2023.08.15 |
[SpringBoot] #10 - 회원 리포지토리 테스트케이스 작성 (0) | 2023.08.10 |