본문 바로가기
Java/스프링 입문 - 스프링 부트, 웹 MVC, DB 접근 기술

[회원 관리 예제, 백엔드 개발 - (3)] 회원 리포지토리 테스트 케이스 작성

by Rezal 2022. 6. 29.

git repository : https://github.com/Rezalog/spring-boot-entry-inf

 

GitHub - Rezalog/spring-boot-entry-inf

Contribute to Rezalog/spring-boot-entry-inf development by creating an account on GitHub.

github.com

 

 

 

메인 메소드나 Controller를 실행해서 테스트를 하기에는 준비 및 실행이 오래걸리고, 반복적으로 실행하거나 여러 테스트케이스를 한번에 실행하기 어려운 단점이 있다.

이를 해결하기 위하여 JUnit 을 이용한 테스트 케이스를 작성하고 테스트 해볼 수 있다.

 

 

JUnit Test 과정 (1) - findById

test > java > hello.hellospring > repository > MemoryMemberRepositoryTest class

 

  1. 구현한 interface 인 MemoryMemberRepository 인스턴스 생성 (repository)
  2. domain 객체에 대해 id,name 값을 Member 인스턴스 member에 set 및 repository save 
  3. DB 역할인 repository 에 save 된 값과 직접 set한 member가 같으면 테스트 성공

 

JUnit Test 과정 (1) - findById - Assertions.assertEquals() 사용

 

System.out.println 대신, 위 라이브러리 메서드로 검증할 수 있다.(expect : member, actual : result) - 순서 정확하지않음

출력은 안되는데 성공시 녹색불, 안되면 에러

 

import org.assertj.core.api.Assertions;

=> options+Enter로 static import 권장

 

 

JUnit Test 과정 (1) - findById - Assertions.assertThat().isEqualTo() 사용

 

마찬가지로, 성공하면 녹색불, 실패하면 에러 발생한다. 실무에서는 에러나면 다음단계로 못넘어가게 막는다고 함.

 

 

JUnit Test 과정 (2) - findByName

 

 

JUnit Test 과정 (2) - findByName 

 

자세히 보면 spring2는 member2의 객체인데 member1과 테스트하고 있으므로 오류 발생.

 

 

 

member 객체에 대한 set된 Name을 제대로 입력하니 정상적으로 테스트 됨을 확인.

 

 

JUnit Test 과정 (3) - findAll

 

 

***AfterEach 로 테스트 메소드마다 데이터 코드 클리어

 

모든 테스트를 포함하는 MemoryMemberRepositoryTest 클래스를 run 하면 테스트가 무엇부터 실행되는지 순서가 보장되지 않는다.

따라서 static 하게 각 메소드마다 검증이 끝나면 AfterEach 로 데이터를 클리어 해주어야한다.

 

MemoryMemberRepository 에서 clearStore 메서드 추가
MemoryMemberRepositoryTest 에서 @AfterEach 및 afterEach 추가

AfterEach 추가 후 한번에 테스트 케이스 실행했더니 모두 성공!

이처럼 테스트는 서로의 의존관계없이 독립적으로 이루어져야한다.

 

 

***TDD(Test-Driven Development ; 테스트 주도 개발) - 매우 중요 !!

: 테스트 케이스에 대한 틀을 먼저 작성하고, 그에 맞춰 구현 클래스를 작성하는 개발 방법론