테스트 케이스 만들기
: 내가 원하는 대로 작동하는지 검증하기 위해 테스트 케이스를 만든다 !
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();
Assertions.assertEquals(member, result);
}
}
hello.hellospring.repository 패키지 생성 후 위의 코드를 작성한다
@Test 어노테이션을 사용하여 검증 가능!
Assertions.assertThat({기대값}).isEqualTo({실제값})
- 여기에서 Assertions는 assertj 라이브러리를 사용
- 기대했던 값이랑 같으면 테스트 성공
- 만약 실제값에 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();
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(3);
}
하지만 클래스에서 테스트 메소드를 모두 돌린다면?
에러 발생!
왜일까?
테스트의 순서는 보장이 안되고, 테스트 메서드가 각각 순서에 영향을 받지 않고 따로 동작하도록 설계해야 한다
findAll()이 먼저 실행되고, member1과 2에 객체가 저장된 이후다.
이 다음으로 findName()이 실행되면? 순서에 의해 에러가 발생
테스트가 끝나면 깔끔하게 clear 하자!
1. MemoryMemberRespository에 clearStore 함수 생성
public void clearStore() {
store.clear();
}
2. @AfterEach 어노테이션 사용!
class MemoryMemberRepositoryTest {
MemoryMemberRepository repository = new MemoryMemberRepository();
@AfterEach
public void afterEach() {
repository.clearStore();
}
테스트가 끝날 때마다 repository를 깔끔하게 만들어 주는 코드
테스트 메서드가 종료되면 마치 콜백 메서드처럼 AfterEach 어노테이션을 거쳐 afterEach를 실행합니다
repository의 clearStore 메서드로 코드를 깔끔히 지움! 순서에 상관이 없어진다.
TDD; 테스트 주도 개발
테스트 틀을 먼저 만든 후 구현 클래스를 만드는 개발 기법
'개발일지 > Spring' 카테고리의 다른 글
[Server] TCP와 UDP (0) | 2023.09.26 |
---|---|
[Spring] 스프링 입문 - 회원 서비스 테스트 (0) | 2023.09.18 |
[Spring] 스프링 입문 - 회원 서비스 개발 (0) | 2023.09.14 |
[Spring] 스프링 입문 - 회원 도메인과 리포지토리 만들기 (0) | 2023.09.12 |
[Spring] 스프링 입문 - 정적 컨텐츠, MVC, API (0) | 2023.09.08 |