개발을 하면서 테스트 과정을 계속 거쳐야 하는데, 매번 H2 콘솔 등에 접속해 쿼리를 입력해 데이터가 저장되는지. 실제로 들어 있는지 확인하는 등 이런 방식으로 테스트하려면 매우 불편하다. 이런 작업을 줄여줄 테스트 코드가 있다.
BlogApiController Class에 Alt+Enter를 누르고 [Create Test]를 누르면 테스트 생성 창이 열린다. 기본값을 그대로 두고 테스트 코드 파일을 생성하면 된다. 이 과정을 마치면 /test/java/패키지/아래에 BlogApiControllerTest.java 파일이 만들어 진다. 이 파일을 수정해보겠다.
ObjectMapper 클래스로 만든 객체는 자바 객체를 JSON 데이터로 변환하는 직렬화(serialization)또는 반대로 JSON 데이터를 자바에서 사용하기 위해 자바 객체로 변환하는 역직렬화(deserialization)할 때 사용한다.
< 자바 직렬화와 역직렬화 >
HTTP에서는 JSON을, 자바에서는 객체를 사용한다. 하지만 서로 형식이 다르기 때문에 형식에 맞게 변환하는 작업이 필요하다. 이런 작업들을 직렬화,역직렬화라고 한다. ① 직렬화란 자바 시스템 내부에서 사용되는 객체를 외부에서 사용하도록 데이터를 변환하는 작업을 이야기한다. 예를 들어 title은 "제목", content는 "내용"이라는 값이 들어 있는 객체가 있다고 가정을 들겠다. 이때 이 객체를 JSON 형식으로 직렬화할 수 있다. ② 역직렬화는 직렬화의 반대이다. 외부에서 사용하는 데이터를 자바 객체 형태로 변환하는 작업을 이야기한다. JSON 형식의 값을 자바 객체에 맞게 변환하는 것도 역직렬화 이다.
이제 블로그 글 생성 API를 테스트하는 코드를 작성하면 된다. given-when-then 패턴을 생성할 코드의 내용은 다음과 같다.
BlogApiControllerTest.java 파일에 작성하면 된다.
Given | 블로그 글 추가에 필요한 요청 객체를 만든다. |
When | 블로그 글 추가 API에 요청을 보낸다. 이때 요청 타입은 JSON이며, given절에서 미리 만들어준 객체를 요청 본문으로 함께 보낸다. |
Then | 응답 코드가 201 Created인지 확인한다. Blog를 전체 조회해 크기가 1인지 확인하고, 실제로 저장된 데이터와 요청 값을 비교한다. |
writeValueAsString() 메서드를 사용해서 객체를 JSON으로 직렬화해준다. 그 이후에는 MockMvc를 사용해 HTTP 메서드, URL,요청 본문,요청 타입등을 설정한 뒤 설정한 내용을 바탕으로 테스트 요청을 보낸다. contentType() 메서드는 요청을 보낼 때 JSON, XML등 다양한 타입 중 하나를 골라 요청을 보낸다. 여기에서 JSON 타입의 요청을 보낸다고 명시했다.
assertThat() 메서드로는 블로그 글의 개수가 1인지 확인한다. 자주 사용하는 메서드는 표로 정리하였다.
코드 | 설명 |
assertThat(articles.size()).isEqualTo(1); | 블로그 글 크기가 1이어야 한다. |
assertThat(articles.size()).isGreaterThan(2); | 블로그 글 크기가 2보다 커야 한다. |
assertThat(articles.size()).isLessThen(5); | 블로그 글 크기가 5보다 작아야 한다. |
assertThat(articles.size()).isZero(); | 블로그 글 크기가 0이어야 한다. |
assertThat(article.title()).isEqualTo("제목"); | 블로그 글 title값이 "제목이어야 한다. |
assertThat(article.title()).isNotEmpty(); | 블로그 글의 title값이 비어있지 않아야 한다. |
assertThat(article.title()).contatins("제"); | 블로그 글의 title값이 "제"를 포함해야 한다. |
테스트 코드를 실행해 코드가 잘 동작하는지 확인한다.
isEqualTo 기대값을 2로 바꿀려면, 요청을 두번 보내면 된다.
Source :스프링 부트 3 백엔드 개발자 되기 - 자바 편
http://www.yes24.com/Product/Goods/118625612
'스프링부트' 카테고리의 다른 글
블로그 글 목록 조회를 위한 API 구현하기 (0) | 2023.05.30 |
---|---|
블로그 글 작성을 위한 API 구현하기 (0) | 2023.05.28 |
블로그 개발을 위한 엔티티 구성하기 (0) | 2023.05.28 |
API와 REST API (0) | 2023.05.28 |
스프링 데이터와 스프링 데이터 JPA 및 코드 살펴보기 (0) | 2023.05.28 |