package hello.hellospring.repository;
import hello.hellospring.domain.Member;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.Test;
import java.util.List;
import static org.assertj.core.api.Assertions.assertThat;
class MemoryMemberRepositoryTest {
MemoryMemberRepository repository = new MemoryMemberRepository(); // 테스트할 메모리 기반의 리포지토리 객체 생성
@AfterEach
public void afterEach() {
repository.clearStore(); // 각 테스트가 종료될 때마다 저장소를 초기화하여 테스트 간의 데이터 격리 보장
}
@Test
public void save() {
Member member = new Member(); // 새 Member 객체 생성
member.setName("spring"); // Member 객체의 이름 설정
repository.save(member); // 리포지토리에 Member 객체 저장
Member result = repository.findById(member.getId()).get(); // 저장된 Member 객체 검색
assertThat(member).isEqualTo(result); // 검색 결과와 원본 객체가 같은지 검증
}
@Test
public void findByName() {
Member member1 = new Member(); // 첫 번째 Member 객체 생성
member1.setName("spring1"); // 이름 설정
repository.save(member1); // 리포지토리에 저장
Member member2 = new Member(); // 두 번째 Member 객체 생성
member2.setName("spring2"); // 이름 설정
repository.save(member2); // 리포지토리에 저장
Member result = repository.findByName("spring1").get(); // 이름으로 첫 번째 Member 검색
assertThat(result).isEqualTo(member1); // 검색 결과가 첫 번째 Member와 동일한지 확인
}
@Test
public void findAll() {
Member member1 = new Member(); // 첫 번째 Member 객체 생성
member1.setName("spring1"); // 이름 설정
repository.save(member1); // 리포지토리에 저장
Member member2 = new Member(); // 두 번째 Member 객체 생성
member2.setName("spring2"); // 이름 설정
repository.save(member2); // 리포지토리에 저장
List<Member> result = repository.findAll(); // 리포지토리의 모든 Member 검색
assertThat(result.size()).isEqualTo(2); // 검색 결과의 크기가 2인지 확인
}
}
테스트 코드 작성
단위 테스트는 소프트웨어 개발 과정에서 매우 중요한 부분입니다. 테스트 코드를 작성함으로써 다음과 같은 이점을 얻을 수 있습니다:
- 버그 감지: 개발 초기 단계에서 버그를 발견하고 수정할 수 있습니다.
- 리팩토링 지원: 코드를 안전하게 리팩토링할 수 있도록 지원합니다. 테스트가 통과하는 한, 리팩토링으로 인한 기능 손상을 걱정하지 않아도 됩니다.
- 기능 검증: 각 기능이 예상대로 동작하는지 검증합니다. 새로운 기능 추가나 기존 기능 변경 시에 기대한 동작을 하는지 확인할 수 있습니다.
- 문서화: 테스트 코드는 어떻게 코드가 사용되어야 하는지에 대한 실제 예시를 제공합니다. 즉, 코드의 사용 방법을 문서화하는 역할도 합니다.
JUnit과 같은 테스트 프레임워크를 사용하면 이러한 테스트를 체계적으로 수행할 수 있습니다. @Test, @BeforeEach, @AfterEach 같은 어노테이션을 사용하여 테스트 환경을 설정하고, 테스트가 수행될 때 필요한 조건을 명확히 할 수 있습니다.
'SPRING > Spring' 카테고리의 다른 글
[스프링| 스프링 입문 | 코드로 배우는 스프링] 회원 서비스 테스트 (1) | 2024.04.26 |
---|---|
[스프링| 스프링 입문 | 코드로 배우는 스프링] 회원 서비스 개발 (0) | 2024.04.24 |
[스프링| 스프링 입문 | 코드로 배우는 스프링] 회원 도메인과 리포지토리 만들기 (0) | 2024.04.23 |
[스프링| 스프링 입문 | 코드로 배우는 스프링] 비즈니스 요구사항 정리 (0) | 2024.04.23 |
[스프링| 스프링 입문 | 코드로 배우는 스프링] API (0) | 2024.04.22 |