[SpringBoot] #10 - 회원 리포지토리 테스트케이스 작성

728x90

 

https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-%EC%9E%85%EB%AC%B8-%EC%8A%A4%ED%94%84%EB%A7%81%EB%B6%80%ED%8A%B8/dashboard

 

📌 테스트 케이스 작성 방법

  • 자바는 JUnit이라는 프레임워크로 테스트를 싱행해서 테스트를 빠르고 한번에 싱행할 수 있도록 해 준다.

 

  • 패키지를 동일하게 만들어주고 클래스명은 테스트하려는 파일 명 +Test를 붙여준다.
import org.junit.jupiter.api.Test;

//굳이 퍼블릭 쓰지 않아도되서 삭제 
class MemoryMemberRepositoryTest {
    
    MemberRepository repository = new MemberRepository();
    
    
    //@Test를 붙여주면 실행시켜줄 수 있다. 
    @Test
    public void save(){
        //실행하면 그냥 save()메서드가 실행됨.
    }
}

  • 해당 코드를 실행하면 아래와 같이 뜬다.

🔸 org.junit.jupiter.api 사용

    @Test
    public void save(){
        //실행하면 그냥 save()메서드가 실행됨.

        //member에 이름 지정
        Member member = new Member();
        member.setName("김아무개");

        //이름 repository에 저장
        repository.save(member);

        //repository에서 member.Id를 가져온다.
        Member result = repository.findById(member.getId()).get();

        //결과가 같은지 확인
        //왼쪽은 기대하는거, 오른쪽은 원하는 값 
        Assertions.assertEquals(member, result);
    }
  • 성공시 초록불
  • 실패시 빨간불

기대했던 건 hello.hellospring.domain.Member@1b083826 인데 실제로는 null이 들어왔다는 뜻

 

🔸 org.assertj.core.api 사용

    @Test
    public void save(){
        //실행하면 그냥 save()메서드가 실행됨.

        //member에 이름 지정
        Member member = new Member();
        member.setName("김아무개");

        //이름 repository에 저장
        repository.save(member);

        //repository에서 member.Id를 가져온다.
        Member result = repository.findById(member.getId()).get();
        
        Assertions.assertThat(member).isEqualTo(result);
    }


- 아래와 같이 설정하면 더 간편하게 사용 할 수 있다.

 

-여러개의 테스트케이스를 만들기 위해 메서드를 복사했을 때 같은 이름을 한번에 바꾸는 법 : shift + F6

 

  • 테스트 케이스의 장점은 한번에 테스트케이스를 돌릴 수도 있다는 점이다.
  • 리스트 형식을 테스트 할 때는 list형식으로 받아서 .size로 확인
    @Test
    public void findAll() {
        Member member1 = new Member();
        member1.setName("이아무개");
        repository.save(member1);

        Member member2 = new Member();
        member2.setName("최아무개");
        repository.save(member2);
        
        List<Member> result = repository.findAll();
        
        assertThat(result.size()).isEqualTo(2);
    }

 

  • 모든 테스트는 순서와 상관없이 따로 돌도록 해야하지만 findAll()이 먼저 실행되면 오류 발생 → 테스트가 한번 끝나면 Clear 해줘야함.

 

📌 테스트 케이스 Clear 메서드 만들기

  • MemoryMemberRepository 에서 clearstore()메서드 추가
    public void clearStore(){
        store.clear();
    }

 

  • MemoryMemberRepositoryTest 에서 @AfterEach 를 이용하여 메서드 실행 후 마지막에 실행 될 메서드 생성
class MemoryMemberRepositoryTest {

    //MemoryMemberRepository 할 것이기 떄문에 MemverRepository -> MemoryMemberRepository 변경
    MemoryMemberRepository repository = new MemoryMemberRepository();

    //메서드가 실행 된 후 마지막에 실행해주는 콜백 메서드
    @AfterEach
    public void afterEach(){
		repository.clearStore();
    }
  • 위와 같이 설정하면 순서와 상관 없이(의존관계 없이) 테스트가 가능해진다.
  • 만약 테스트케이스를 먼저 만들고 구현하는 방식으로 (역순으로) 진행 시 테스트 주도 개발이라고 함.(TTD)
728x90