테스트 코드 작성시 관례 : (테스트할 코드이름)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() 가 실행되어 데이터가 순서나 의존관계없이 실행되어 테스트코드를 잘 작성할 수 있다.
packagehello.hellospring;importhello.hellospring.domain.Member;importhello.hellospring.repository.MemberRepository;importhello.hellospring.repository.MemoryMemberRepository;importorg.assertj.core.api.Assertions;importorg.junit.jupiter.api.AfterEach;importorg.junit.jupiter.api.Test;importjava.util.List;importjava.util.Optional;importstaticorg.assertj.core.api.Assertions.*;classMemoryMemberRepositoryTest {//MemberRepository repository = new MemoryMemberRepository();//MemoryMemberRepository만 테스트하는 거니까 아래처럼 인터페이스가 아니라 바꾼다.MemoryMemberRepository repository =newMemoryMemberRepository(); @AfterEach//메서드 실행이 끝날 때마다 동작한다. save() 끝나고 afterEach(), findByName() 끝나고 afterEach(), findAll() 끝나고 afterEach()publicvoidafterEach(){repository.clearStore(); } @Testpublicvoidsave(){Member member =newMember();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); } @TestpublicvoidfindByName(){Member member1 =newMember();member1.setName("spring1");repository.save(member1);Member member2 =newMember();member2.setName("spring2");;repository.save(member2);Member result =repository.findByName("spring1").get();//get()을 하면 optional을 한번 깔 수 있다.assertThat(result).isEqualTo(member1); } @TestpublicvoidfindAll(){Member member1 =newMember();member1.setName("spring1");repository.save(member1);Member member2 =newMember();member2.setName("spring2");repository.save(member2);List<Member> result =repository.findAll();assertThat(result.size()).isEqualTo(2); }}