Member와 관련된 함수를 테스트하는 코드를 가볍게 작성해보았다.
public class MemoryMemberRepositoryTest {
MemoryMemberRepository repository = new MemoryMemberRepository();
@Test
public void save() {
Member member = new Member();
member.setName("Spring1");
repository.save(member);
Member result = repository.findById(member.getId()).get();
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();
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이 테스트를 통과하지 못했다. 코드를 아무리봐도 이상한 게 없는데???
이렇게 된 이유는 테스트가 순서대로 실행되지 않기 때문이다.
코드 순서는
save()--> findByName() --> findAll()이지만 테스트가 꼭 그 순서대로 실행되는 건 아니다. 그렇기 때문에 테스트가 끝날 때마다 초기화를 해줘야 한다. 즉, 절대 코드 순서에 의존적이도록 테스트 코드를 짜면 안 된다!!!
public class MemoryMemberRepositoryTest {
MemoryMemberRepository repository = new MemoryMemberRepository();
@AfterEach
public void afterEach(){
repository.clear();
}
@Test
public void save() {
Member member = new Member();
member.setName("Spring1");
repository.save(member);
Member result = repository.findById(member.getId()).get();
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("Spring2").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);
}
afterEach를 통해 각 테스트가 끝날 때마다 저장소를 초기화하도록 만들어줬다. 그러면 테스트가 잘 통과될까??
Clear~
'웹개발 > Spring' 카테고리의 다른 글
[Spring]Spring JPA의 1차 캐시는 얼마나 이득을 줄 수 있을까. (0) | 2020.11.08 |
---|---|
[Spring] Annotation을 알아보자 - 2. Annotation은 어떻게 처리될까? (0) | 2020.08.06 |
[Spring] Annotation을 알아보자 - 1. 기본 개념과 직접 해보기 (0) | 2020.08.06 |