-
[스프링 입문] Section 3.회원 관리 예제: 회원 리포지토리 테스트 케이스 작성강의 기록/스프링 입문(김영한) 2021. 3. 16. 15:02
Section 3
- 비즈니스 요구사항 정리
- 회원 도메인과 리포지토리 만들기
- 회원 리포지토리 테스트 케이스 작성
- 회원 서비스 개발
- 회원 서비스 테스트
테스트 케이스 작성
hello.hellospring.repository
MemoryMemberRepository.java
메소드 코드 추가
package hello.hellospring.repository; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Optional; import org.springframework.stereotype.Repository; import hello.hellospring.domain.Member; /** * 동시성 문제가 고려되어 있지 않음, 실무에서는 ConcurrentHashMap, AtomicLong 사용 고려 */ public class MemoryMemberRepository implements MemberRepository { public void clearStore() { store.clear(); } }
테스트 케이스 작성
hello.hellospring.repository
MemoryMemberReository.java
package hello.hellospring.repository; import static org.assertj.core.api.Assertions.*; import java.util.List; import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.Test; import hello.hellospring.domain.Member; public class MemoryMemberRepositoryTest { /* * test 순서 보장 안됨. 전체 돌리면 findByName 오류 (spring1, spring2가 겹쳐 문제 발생)=> data clear */ MemoryMemberRepository repository = new MemoryMemberRepository(); /** * AfterEach: 메소드 동작이 끝날때 호출되는 메소드 */ @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)); /** * Test 1 * import org.junit.jupiter.api.Assertions */ // success test //Assertions.assertEquals(result, member); // fail test //Assertions.assertEquals(result, null); // 빨간 불 /** * Test 2 * import org.assertj.core.api.Assertions */ // success test //Assertions.assertThat(member).isEqualTo(result); /** * Test 3 * import static org.assertj.core.api.Assertions.*; */ //suceess test assertThat(member).isEqualTo(result); // fail test //assertThat(member).isEqualTo(null); } @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(); // fail test //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("spring1"); repository.save(member2); List<Member> result = repository.findAll(); assertThat(result.size()).isEqualTo(2); // fail test //assertThat(result.size()).isEqualTo(3); } }
TDD(Test-driven Development): 테스트 주도 개발방법론
코드 작성 전에 테스트 코드 작성하는 방법
'강의 기록 > 스프링 입문(김영한)' 카테고리의 다른 글
[스프링 입문] Section 3.회원 관리 예제: 회원 서비스 테스트 (0) 2021.03.16 [스프링 입문] Section 3.회원 관리 예제: 회원 서비스 개발 (0) 2021.03.16 [스프링 입문] Section 3.회원 관리 예제: 회원 도메인과 리포지토리 만들기 (0) 2021.03.16 [스프링 입문] Section 3.회원 관리 예제: 비즈니스 요구사항 정리 (0) 2021.03.16 [스프링 입문] Section 2.스프링 웹 개발 기초 (0) 2021.03.16