[spring] 회원관리프로그램 - 리포지토리 테스트 작성 (스프링 입문 by 김영한)

su_y2on·2022년 1월 11일
0

Spring

목록 보기
3/30
post-thumbnail

회원관리프로그램 - 리포지토리 테스트 케이스

이제 구현한 리포지토리에 함수들이 잘 동작하는지 살펴보기위해 테스트를 진행하겠습니다.

test모듈 안에 repository라는 패키지를 만들고 그 안에 MemoryMemberRepositoryTest라는 java class를 생성해 테스트를 진행해 보도록 하겠습니다!

각각의 함수들(save, findByName, findAll)을 체크해보기 위해 테스트 케이스를 작성하면 되는데요. 테스트 케이스를 작성할 때는 given(어떤상황에서), when(~일 때), then(~이어야한다)으로 기준을 나누면 좋습니다.



public class MemoryMemberRepositoryTest {

    MemoryMemberRepository repository = new MemoryMemberRepository();

    // 모든 test가 끝날 때 마다 실행
    // 각각의 test가 의존적이지 않게 clear
    @AfterEach
    public void afterEach(){
        repository.clearStore();
    }

    @Test
    public void save(){
        //given 
        Member member = new Member();
        member.setName("spring");
        
        //when
        repository.save(member);
        
        //then
        Member result = repository.findById(member.getId()).get();
        assertThat(result).isEqualTo(member);
    }

    @Test
    public void findByName() {
        // given
        Member member1 = new Member();
        member1.setName("spring1");
        repository.save(member1);

        // shift+f6 이름 한번에 바꾸기
        Member member2 = new Member();
        member2.setName("spring2");
        repository.save(member2);

        // when
        Member result = repository.findByName("spring1").get();

        // then
        assertThat(result).isEqualTo(member1);

    }

    @Test
    public void findAll(){
        //given
        Member member1 = new Member();
        member1.setName("spring1");
        repository.save(member1);

        Member member2 = new Member();
        member2.setName("spring2");
        repository.save(member2);
        
        //when
        List<Member> result = repository.findAll();

        //then
        assertThat(result.size()).isEqualTo(2);


    }
}


순서 독립적인 test 작성

지금 이 상태에서 @AfterEach를 빼고 전체 test를 run하면 findByName에서 아래와 같이 에러가 나고 나머지는 테스트를 통과합니다

이유는 findAll이 먼저 돌아가면서 회원이 2명 추가되고 findByName이 그 다음에 돌아가면서 동명이인 2명을 또 추가했기때문에 *찾는 spring1과 다른 객체가 나온 것입니다.

따라서 모든 테스트 케이스들은 순서에 독립적으로 작성되어야하기 때문에 @AfterEach를 붙여서 매번 test가 끝나면 store을 clear해줍니다



테스트 결과


이제 마지막으로 @AfterEach까지 넣어서 테스트를 돌려보면(테스트 클래스를 run하면 전체 테스트 진행) 모두 통과된 것을 확인할 수 있습니다

0개의 댓글