스프링 Spring/스프링 입문

[회원 관리 예제 - 백엔드 개발] 회원 리포지토리 테스트 케이스 작성

코딩개발 2022. 1. 12. 20:38
728x90
반응형

회원 리포지토리 테스트 케이스 작성

 

 

회원 리포지토리 메모리 구현체 테스트

1. save() 테스트

MemberRepository repository = new MemoryMemberRepository();

@Test
public void save() {
    Member member = new Member();
    member.setName("spring");

    repository.save(member);

    Member result = repository.findById(member.getId()).get();
//        Assertions.assertEquals(member, null);
//        System.out.println("result = " + (result == member));
    Assertions.assertEquals(member, result); // 1
    Assertions.assertEquals(member, null); // 2
    assertThat(member).isEqualTo(result); // 3 / member가 result와 똑같다.
}

1, 3번 정상

 

2번

 

 

2. findByName 테스트

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

    Member member2 = new Member();
    member2.setName("spring2");
    repository.save(member2);

//    Member result = repository.findByName("spring1").get(); // 1
    Member result = repository.findByName("spring2").get(); // 2

assertThat(result).isEqualTo(member1);

1번 정상

2번

 

 

3. findAll 테스트

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

    Member member2 = new Member();
    member2.setName("spring2");
    repository.save(member2);

    List<Member> result = repository.findAll();

//    assertThat(result.size()).isEqualTo(2); // 1
    assertThat(result.size()).isEqualTo(3); // 2
}

1번 정상

2번

 

 

위 3가지를 정상동작 했던 코드로 전체 실행 하면 에러 발생

public class MemoryMemberRepositoryTest {

    MemberRepository repository = new MemoryMemberRepository();

    @Test
    public void save() {
        Member member = new Member();
        member.setName("spring");

        repository.save(member);

        Member result = repository.findById(member.getId()).get();
        assertThat(member).isEqualTo(result); // member가 result와 똑같다.
    }

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

        Member member2 = new Member();
        member2.setName("spring2");
        repository.save(member2);

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

        assertThat(result).isEqualTo(member1);
    }

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

        Member member2 = new Member();
        member2.setName("spring2");
        repository.save(member2);

        List<Member> result = repository.findAll();

        assertThat(result.size()).isEqualTo(2);
    }
}

 

 

원인

findByName()전에 findAll()에서 저장되어 있는 member값을 get()하여 에러 발생

테스트가 끝나면 데이터를 clear 해주어야 함

 

아래 코드와 같이 @AfterEach 와 메소드 추가하고,

MemoryMemberRepository에 clearStore() 메소드 추가

public void clearStore() {
    store.clear();
}

 

public class MemoryMemberRepositoryTest {

//    MemberRepository repository = new MemoryMemberRepository(); // interface라 메소드 추가를 못하므로 아래 구현체에 clear 구현
    MemoryMemberRepository repository = new MemoryMemberRepository();

    @AfterEach // 아래 메소드(save(),findByName(), findAll())가 끝날때 마다 실행됨 
    public void afterEach() {
        repository.clearStore();
    }

    @Test
    public void save() {
        Member member = new Member();
        member.setName("spring");

        repository.save(member);

        Member result = repository.findById(member.getId()).get();
        assertThat(member).isEqualTo(result); // member가 result와 똑같다.
    }

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

        Member member2 = new Member();
        member2.setName("spring2");
        repository.save(member2);

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

        assertThat(result).isEqualTo(member1);
    }

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

        Member member2 = new Member();
        member2.setName("spring2");
        repository.save(member2);

        List<Member> result = repository.findAll();

        assertThat(result.size()).isEqualTo(2);
    }
}

 

결과

 


<출처>

인프런 강의 "스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술"을 정리한 것 입니다.

 

[무료] 스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술 - 인프런 | 강의

스프링 입문자가 예제를 만들어가면서 스프링 웹 애플리케이션 개발 전반을 빠르게 학습할 수 있습니다., 스프링 학습 첫 길잡이! 개발 공부의 길을 잃지 않도록 도와드립니다. 📣 확인해주세

www.inflearn.com

 
728x90
반응형