package hello.hellospring.repository;
import hello.hellospring.domain.Member;
import hello.hellospring.repository.MemberRepository;
import hello.hellospring.repository.MemoryMemberRepository;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
import java.util.List;
import java.util.Optional;
public class MemoryMemberRepositoryTest {
MemoryMemberRepository repository = new MemoryMemberRepository();
@Test
public void save(){
Member member = new Member();
member.setName("spring");
repository.save(member);
Member result = repository.findById(member.getId()).get();
//검증1
System.out.println("result = "+(result==member));
//검증2
Assertions.assertEquals(member,result);
//다를 경우
//Assertions.assertEquals(member,null);
//검증3
}
@Test
public void findByName(){
Member member1 = new Member();
member1.setName("spring1");
repository.save(member1);
Member member2 = new Member();//shift+f6: rename
member2.setName("spring2");
repository.save(member2);
Member result = repository.findByName("spring1").get();//get()을 쓰면 Optional을 한번 까는 것
Assertions.assertEquals(member1,result);
}
@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();
Assertions.assertEquals(result.size(),2);
}
}
한번에 테스트 실행 시 순서는 일정하지 않음
해결방안: Test가 하나 끝나면 데이터를 클리어 시켜줘야 한다.
clearStore(): 메서드 하나가 실행된 후 저장소를 비움
public void clearStore(){
store.clear();
}
@AfterEach
public void afterEach(){//메서드가 끝날 때마다 실행되는 메서드: 콜백메서드
repository.clearStore();
}
코드 규모가 커질수록 테스팅 없이 개발 불가능
Tip) 테스트 주도 개발(TDD: Test Driven Development): 테스트 케이스 틀을 먼저 만들고 개발을 진행하는 방식