| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | 7 |
| 8 | 9 | 10 | 11 | 12 | 13 | 14 |
| 15 | 16 | 17 | 18 | 19 | 20 | 21 |
| 22 | 23 | 24 | 25 | 26 | 27 | 28 |
| 29 | 30 | 31 |
- 공부
- 이클립스
- 오류모음
- 백준문제풀이
- 무결성 제약조건
- for문
- Oracle
- 오류
- Ajax
- 별 찍기
- 인터페이스
- 순환문
- 오라클
- 백준
- 이클립스단축기
- 자바
- while
- ORA-02292
- 백준문제
- ORA-01407
- 스프링
- 깃허브 블로그
- 전화번호부
- MSI
- 티스토리 블로그
- 환경설정
- spring
- jsp
- 파워서플라이
- 설정
- Today
- Total
danDevlog
[Spring Boot] 회원 관리 예제 - 회원 리포지토리 테스트 케이스 작성 본문
기존에 내가 해오던 검증 방법은 main메소드를 실행해서 메소드에 여러 변수를 넣어봐서
잘 되면 넘어가는 그런 식으로 테스트를 해보았다.
하지만 이런 경우는 테스트 해야하는 양이 많아지면 실행하기가 어려워진다.
따라서 테스트 케이스를 작성하고 테스트 코드를 실행하여 동작을 검증해야한다.
인텔리제이에서는 따로 test 패키지 에서 테스트 검증을 할 수 있다.
MemoryMemberRepository를 검증하기 위하여 test 내부에 repository 패키지를 만들고
MemoryMemberRepositoryTest 클래스를 생성한다. JUnit 테스트 도구를 이용하여 테스트 한다.
@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);
assertThat(member).isEqualTo(result);
}
@Test 어노테이션을 메소드 위에 선언하면 해당 메소드를 테스트 대상으로 지정할 수 있다.
assertions.assertEquals(expected, actual) 메소드는 expected와 actual이 같으면 테스트를 통과시킨다.
더 쉬운 방법으로는 assertThat(member).isEqualTo(result); 로 같은 결과가 나온다.
위 테스트를 통해 member와 db에 저장되어 있는 result가 같으면 테스트를 통과한다.

테스트를 통과하면 체크 표시가 생긴다.

만약 새로운 member를 생성하고 그 id로 테스트를 해보면 사진과 같이 오류가 발생한다.
findByName과 findAll
@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);
}

위 코드들 모두 개별 테스트로 실행을 하면 통과하지만, 클래스 단위로 테스트를 실행하면 테스트가 통과되지 않는다.
이유는 테스트가 실행되는 순서가 보장되지 않기 때문이다. 위에서 findAll()이 첫 번째로 실행되었는데 이 메서드에서
이미 member1 과 member2 가 생성되어 리포지토리에 save 되었기 때문에 오류가 발생한다.
때문에 해결하기 위하여 하나의 테스트가 종료될 때마다 리포지토리를 초기화 시켜줘야한다.
@AfterEach
// 하나의 메소드가 끝날때마다 공용 데이터들을 초기화시켜줘야 한다.
// AfterEach를 사용하면 Test클래스에 있는 모든 메소드들이 각각 끝나고나서 해당 메소드를 실행한다.
public void afterEach(){
// clearStore() 함수를 따로 만들어줘야함.
repository.clearStore();
}
AfterEach어노테이션을 이용하여 리포지토리를 초기화 시켜준다.
이렇게 초기화를 시켜주는 코드를 추가하면 클래스 단위로 모두 테스트를 해도 통과되는것을 볼 수 있다.

'Spring 입문' 카테고리의 다른 글
| [Spring Boot] 컴포넌트 스캔과 자동 의존관계 설정 (0) | 2022.03.26 |
|---|---|
| [Spring Boot] 회원 관리 예제 - 서비스 개발 / 서비스 테스트 (0) | 2022.03.22 |
| [Spring Boot] 회원 관리 예제 - 도메인과 리포지토리 만들기 (0) | 2022.03.21 |
| [Spring Boot] 정적 컨텐츠 / MVC와 템플릿 엔진 / API (0) | 2022.03.21 |
| [Spring Boot] 사전 환경 준비 (0) | 2022.03.21 |