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

테스트 코드 작성시 관례 : (테스트할 코드이름)Test 붙여준다! main 메서드 작성하듯이 코드 짜면 된다! test>java폴더>hello.hellospring패키지>repository패키지>MemoryMemberRepositoryTest 클래스 생성

단, 주의해야하는 것은 테스트는 순서나 의존관계 없이 실행되어야한다! save(), FindByName(),FindAll() 메서드 테스트 코드 작성 후 모두 실행하면 에러가 난다!! 이유는, FindByName(),FindAll() 메서드 각각 내에서 동일한 이름의 객체 member1를 생성하고 저장한다. 테스트코드 실행시 FindAll()이 먼저 실행되었다. FindByName()에서 member1과 같은지 비교하는 부분에서 FindByName()에서 생성된 member1가 아닌 FindAll()에서 먼저 실행되어 생성, 저장된 member1과 비교하기 때문에 틀렸다는 오류가 나왔다!!

해결방법 1. MemoryMemberRepository에 clearStore()라는 메서드를 만들어서 store데이터를 비우는 메서드를 구현한다! 2. MemoryMmeberRepositoryTest로 다시 돌아와 @AfterEach를 해주고 1번의 clearStore를 호출, 실행하는 메서드를 구현해준다! 3. 1,2를 통해 메서드가 실행되고 난 후 2번의 afterEach() 가 실행되어 데이터가 순서나 의존관계없이 실행되어 테스트코드를 잘 작성할 수 있다.

package hello.hellospring;

import hello.hellospring.domain.Member;
import hello.hellospring.repository.MemberRepository;
import hello.hellospring.repository.MemoryMemberRepository;
import org.assertj.core.api.Assertions;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.Test;

import java.util.List;
import java.util.Optional;

import static org.assertj.core.api.Assertions.*;

class MemoryMemberRepositoryTest {

    //MemberRepository repository = new MemoryMemberRepository();
    //MemoryMemberRepository만 테스트하는 거니까 아래처럼 인터페이스가 아니라 바꾼다.
    MemoryMemberRepository repository = new MemoryMemberRepository();

    @AfterEach//메서드 실행이 끝날 때마다 동작한다. save() 끝나고 afterEach(), findByName() 끝나고 afterEach(), findAll() 끝나고 afterEach()
    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();
        //System.out.println("result = "+ (result == member));
        //Assertions.assertEquals(member,null);//(expected,actual)
        assertThat(member).isEqualTo(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();//get()을 하면 optional을 한번 깔 수 있다.
        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);
    }


}

Last updated