작성한 코드가 제대로 구현이 되었는지 검증하는 습관을 가져야 한다.
검증을 통해 예상치 못한 에러를 미연에 방지하자
간단하게 메소드를 검증 해보자
먼저 build.gradle에 아래 의존성 중 하나가 있는지 확인
testImplementation 'org.springframework.boot:spring-boot-starter-test'
testImplementation group: 'org.assertj', name: 'assertj-core', version: '3.23.1'
spring-boot-starter-test에는 JUnit, Spring Test, AssertJ, Mockito, MockMvc등의 라이브러리가 포함되어 있다.
import static org.assertj.core.api.Assertions.assertThat;
import static org.junit.jupiter.api.Assertions.assertNotNull;
import org.junit.jupiter.api.Test;
import com.google.gson.Gson;
import down.dto.PostDto;
public class FetchTest {
@Test // 테스트 코드에서 main의 역할
public void get_test() { // 검증할 메소드 이름 뒤에 '_test' 를 붙이자
// given
String download = Fetch.get("http://jsonplaceholder.typicode.com/posts/");
// System.out.println(download); // 정상이라면 콘솔에 출력된다
// when
Gson gson = new Gson();
PostDto[] postDtos = gson.fromJson(download, PostDto[].class);
// 파싱을 하긴 했는데 파싱이 제대로 되었을까 ?
// verify
// 내가 넣은값이랑 같은지 확인
assertThat(postDtos.length).isEqualTo(100);
assertNotNull(postDtos[0]);
}
}
given 에서 두가지 예외가 발생할 수 있다
assertThat(첫번째).isEqualTo(두번째) 는 첫번째 인수의 값과 두번째 인수의 값이 일치한지 확인
assertNotNull() 은 인수의 데이터가 Null이 아닌지 확인
위의 두 메소드로 간단하게 검증을 할 수 있다.
만약 통과하지 못하면



이렇게 검증이 실패하게 된다
통과할 경우 아무런 에러가 뜨지 않는다
여기서 주의점은 기본형 타입들의 숫자를 검증할 경우인데
json 의 데이터를 받을 클래스가 int 같은 기본형 타입으로 필드를 가졌을때
데이터 초기화가 되지 않고 객체가 생성된다면 int 는 0과 같은 기본값으로 초기화가 된다.
이럴경우 실제 json 의 데이터가 0일수도 있고 데이터가 들어오지 않아서 0으로 초기화 됐을 수도 있으므로
테스트 코드가 제대로 검증이 되었는지 확신할 수 없다.
그러므로 int 같은 숫자 타입들은 래퍼클래스로 변경하여 Integer 타입으로 선언해야 한다
객체가 생성되었을 시 속성이 클래스 타입(Integer)일 경우 초기화가 안돼면 기본값으로 null을 가지므로
검증시 null인지 확인하면 데이터를 제대로 불러오는지 검증할 수 있다.