- JUnit -> Hamcrest1
- JUnit Assertion 기능 이용
- assertEquals(expected, actual);
- 파라미터로 입력된 값의 변수 이름을 통해 대략 어떤 검증인지 알 수 있으나, 구체적인 의미는 유추가 필요함.
- Hamcrest의 매쳐 이용
- assertThat(actual, is(equalTo(expected)));
하나의 영어 문장으로 자연스럽게 읽혀짐. 결과값이 기대값과 같다는 것을 검증한다.
assertThat() 메서드의 파라미터
첫번째 파라미터는 테스트 대상의 실제 결과 값.
두번째 파라미터는 기대하는 값. 예상 값.
- 테스트 실패 시
- JUnit -> Hamcrest2
- currencyName is not Null Value 성공
- JUnit -> Hamcrest3
- 발생한 예외가 null인지 여부 체크
- (1) 과 같이 JUnit의 assertThrows() 메서드를 이용하여 리턴값으로 받은 Exception 내부의 정보를 가져와서 추가로 검증
- Hamcrest만으로 예외를 테스트하기 위해서는 Custom Matcher를 직접 구현해서 사용
- 스모크 테스트
QA부서에서 본격적으로 전체 기능 테스트를 진행하기 전, 애플리케이션의 특정 수정 사항으로 인해 영향을 받을 수 있는 범위에 한해서 제한된 테스트를 진행
- Controller 테스트를 위한 테스트 클래스 구조
- (1) Application Context 생성 (애플리케이션에 필요한 Bean객체들이 등록되어 있음)
- (2) Controller 테스트를 위한 애플리케이션의 자동 구성 작업을 해줌
- (3) DI로 주입 받은 MockMvc는 Tomcat 같은 서버를 실행하지 않고 컨트롤러를 테스트 할 수 있는 환경을 지원해주는 일종의 Spring MVC 테스트 프레임워크
- (4) 테스트하고자 하는 Controller 핸들러 메서드의 테스트 케이스 작성
- MemberController 테스트
Given
a. (1) 포스트맨 사용 시 request body에 포함시키는 요청 데이터와 동일한 역할
b. (2)에서 Gson이라는 JSON변환 라이브러리를 이용해서 (1)에서 생성한MemberDto.Post
객체를 JSON 포맷으로 변환해준다.Gson 라이브러리 사용 :
build.gradle의 dependencies에 implementation 'com.google.code.gson:gson' 추가When
a. MockMvc로 테스트 대상 Controller의 핸들러 메서드에 요청을 전송하기 위해서는 (3)과 같이perform()
메서드를 호출해야함. (세부 정보 포함)
b. MockMvcRequestBuilders 클래스를 이용해서 빌더 패턴을 통해 request정보를 채워넣기 가능
- (4)에서
post()
메서드를 통해 HTTP POST METHOD와 request URL 설정- (5)에서
accept()
메서드를 통해 클라이언트 쪽에서 리턴 받을 응답 데이터 타입으로 JSON 타입으로 설정- (6)에서
contentType()
메서드를 통해 서버 쪽에서 처리 가능한 Content Type으로 JSON 타입 설정- (7)에서
content()
메서드를 통해 request bosy 데이터 설정
((2)에서 Gson 라이브러리를 이용해 변환된 JSON 문자열)Then
a. MockMvc의perform()
메서드는 ResultActions 타입의 객체를 리턴하는데, 이 객체를 이용해서 우리가 전송한 request에 대한 검증을 수행할 수 있다.
b. (8)에서 andExpect() 메서드를 통해 파라미터로 입력한 매쳐로 예상되는 기대 결과 검증 가능
(8)에서status().iscreated()
를 통해 response status가 201(Created)이 맞는지 검증
c. (9)에서 andReturn()을 통해서 response 데이터 확인 , 디버깅 용도로 response로 전달되는 응답 데이터를 출력할때 사용됨.
- 한글 깨질 시 yml 파일에 추가
- response body의 각 프로퍼티의 값 검증 기능 추가
- (1)
jsonPath()
메서드를 통해 response body(JSON형식) 의 각 프로퍼티 중에서 응답으로 전달 받는 email 값이 request body로 전송한 email과 일치하는지 검증- (2), (3) 도 마찬가지
jsonPath()
를 사용하면 JSON형식의 개별 프로퍼티에 쉽게 접근 가능
- MemberRepository 테스트
- (1) @DataJpaTest 애너테이션을 테스트 클래스에 추가함으로써, MemberRepository의 기능을 정상적으로 사용하기 위한 Configuration을 Spring이 자동으로 해준다.
- Transactional 애너테이션을 포함하고 있어서 하나의 테스트 케이스 실행이 종료되면 저장된 데이터가 롤백됨.
- (2) 테스트 대상인 MemberRepository를 DI 받는다.
- (3) 테스트 할 회원 정보 데이터 준비
- (4) 회원 정보 저장
- (5) 회원정보가 잘 저장되었는지 검증
- (5-1)과 같이 정상 저장 뒤에 리턴값으로 반환된 Member객체가 null이 아닌지 검증
- 나머지는 리턴값으로 반환된 객체의 필드들이 테스트 데이터와 일치하는지 검증
✔ 회원 정보 조회 테스트
중복된 이메일 주소가 있는지를 조회하는 기능의findByEmail((String email))
메서드 테스트
- (1) 에서 테스트 할 회원 정보 데이터를 준비
- (2)에서 회원 정보 저장
- (2)에서 저장한 회원 정보 중에서 이메일에 해당되는 회원 정보를 잘 조회하는지 테스트하기위해 (3)과 같이 findByEmail() 로 회원정보를 조회
- (4)에서 회원정보의 조회가 정상적으로 이루어지는지 검증
- null이 아닌지 검증
- (4-2)에서 조회한 회원의 이메일 주소와 테스트 데이터의 이메일과 일치하는지 검증