· 단점 : 준비 및 실행 시 많은 시간 소모 / 반복 실행 어렵 / 여러 테스트를 한번에 실행하기 어렵
▶ Javasms JUnit Framework로 테스트를 실행해서 아리헌 문제를 해결
▶ 폴더 구성
test 폴더 위치에서 main 폴더와 똑같이 repository 패키지를 생성하고, MemoryMemberRepositoryTest 클래스를 생성한다.
▶ MemoryMemberRepositoryTest 코드 작성
save 메소드를 실행하려고 한다면, 메소드 선언 후 그 위에 junit.juplter.api에 있는 Test 어노테이션을 붙여주기만 하면 된다. 코드 왼쪽에 실행버튼을 눌러 save함수를 실행하면 아래에서 보이듯이 실행이 된 것을 확인할 수 있다.
▷ test 코드 작성
member에 이름을 세팅하고, 해당 member를 repository에 저장한다. 저장한 member가 내가 저장한 member가 맞는지 출력 코드를 통해 확인해보면, 다음과 같이 true로 반환되어 출력된 것을 확인할 수 있다.
▷ 더 test 다운 코드 작성
System.out으로 하나하나 확인할 순 없다. 그러므로 junit.jupiter.api 에서 제공하는 Assertions의 assertEquals 메소드를 사용한다. assertEquals(기대하는 것, 실제 결과) 메소드를 작성하여 실행을 시키면, 왼쪽 아래에 초록색 체크 표시가 뜨며 출력 결과에는 아무것도 출력되지 않는 것을 확인할 수 있다.
test를 통과하지 못한 코드 확인 ◀
assertEquals의 actual 변수에 null을 작성하여 실행시킨다. 왼쪽 아래를 보면
다른 패키지 사용
org.assertj.core.api 는 org.junit.jupiter.api보다 코드를 직관적으로 이해할 수 있다고 한다.테스트 실행 결과
import를 전역으로 사용하기
import를 static으로 선언해서 사용하면, Assertions를 작성하지 않아도 해당 함수를 사용할 수 있다.
▷ findByName() 함수 테스트 케이스 작성
▷ findAll() 함수 테스트 케이스 작성
▶ 전체 실행 시, 테스트 케이스의 동작
클래스 전체를 실행 시키게 되면, 순서에 상관없이 테스트가 진행되며 특히 테스트 과정 중에 삽입한 데이터가 지워지지 않아 오류가 난 것을 확인할 수 있다.
♥ 해결방안
[1] MemoryMemberRepository.java에서 clear 함수 만들기MemoryMemberRepositoryTest.java에서 @AfterEach 어노테이션이 붙은 afterEach 함수 생성하기
테스트에서 데이터를 지우지않으면, 오류가 난다. 테스트는 서로 순서상관없이 / 의존관계없이 설계가 되어야한다. --> 하나의 테스트 마다 공용 데이터는 지우기!! 중요