스프링 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
반응형