git repository : https://github.com/Rezalog/spring-boot-entry-inf
메인 메소드나 Controller를 실행해서 테스트를 하기에는 준비 및 실행이 오래걸리고, 반복적으로 실행하거나 여러 테스트케이스를 한번에 실행하기 어려운 단점이 있다.
이를 해결하기 위하여 JUnit 을 이용한 테스트 케이스를 작성하고 테스트 해볼 수 있다.
JUnit Test 과정 (1) - findById
- 구현한 interface 인 MemoryMemberRepository 인스턴스 생성 (repository)
- domain 객체에 대해 id,name 값을 Member 인스턴스 member에 set 및 repository save
- 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 로 데이터를 클리어 해주어야한다.
AfterEach 추가 후 한번에 테스트 케이스 실행했더니 모두 성공!
이처럼 테스트는 서로의 의존관계없이 독립적으로 이루어져야한다.
***TDD(Test-Driven Development ; 테스트 주도 개발) - 매우 중요 !!
: 테스트 케이스에 대한 틀을 먼저 작성하고, 그에 맞춰 구현 클래스를 작성하는 개발 방법론
'Java > 스프링 입문 - 스프링 부트, 웹 MVC, DB 접근 기술' 카테고리의 다른 글
[회원 관리 예제, 백엔드 개발 - (5)] 회원 서비스 테스트 (0) | 2022.06.30 |
---|---|
[회원 관리 예제, 백엔드 개발 - (4)] 회원 서비스 개발 (0) | 2022.06.30 |
[회원 관리 예제, 백엔드 개발 - (2)] 회원 도메인과 리포지토리 만들기 (0) | 2022.06.29 |
[회원 관리 예제, 백엔드 개발 - (1)] 비즈니스 요구사항 정리 (0) | 2022.06.29 |
[스프링 웹 개발 기초 - (3)] API (0) | 2022.06.29 |