블로그 API(3): 블로그 글 작성 테스트 코드 작성, 직렬화 역직렬화

도람·2025년 7월 29일
post-thumbnail

API 테스트 코드 작성

  • 지난 포스팅처럼, 테스트를 할 때 실제 데이터가 들어가 있는지 확인하기 위해 H2 콘솔에 접속해 쿼리를 입력하여 확인할 수 있는데 이렇게 매번 하면 불편하다.
  • 따라서 이러한 번거로운 작업을 줄여줄 테스트 코드를 작성한다.

BlogApiControllerTest

  • BlogApiController 클래스에 alt+enter을 눌러 [Create Test]를 눌러 테스트 코드를 생성한다.
@SpringBootTest
@AutoConfigureMockMvc
class BlogApiControllerTest {

    @Autowired
    protected MockMvc mockMvc;

    @Autowired
    protected ObjectMapper objectMapper; // 직렬화, 역직렬화를 위한 클래스

    @Autowired
    private WebApplicationContext context;

    @Autowired
    BlogRepository blogRepository;

    @BeforeEach
    public void mockMvcSetUp(){
        this.mockMvc = MockMvcBuilders.webAppContextSetup(context)
                .build();
        blogRepository.deleteAll();
    }

    @DisplayName("addArticle: 블로그 글 추가에 성공한다.")
    @Test
    public void addArticle() throws Exception{

        //given
        final String url = "/api/articles";
        final String title = "title";
        final String content = "content";
        final AddArticleRequest userRequest = new AddArticleRequest(title, content);

        // 객체 JSON으로 직렬화
        final String requestBody = objectMapper.writeValueAsString(userRequest);

        //when
        // 설정한 내용을 바탕으로 요청 전송
        ResultActions result = mockMvc.perform(post(url)
                .contentType(MediaType.APPLICATION_JSON_VALUE)
                .content(requestBody));

        //then
        result.andExpect(status().isCreated());

        List<Article> articles = blogRepository.findAll();

        assertThat(articles.size()).isEqualTo(1);   //크기가 1인지 검증
        assertThat(articles.get(0).getTitle()).isEqualTo(title);
        assertThat(articles.get(0).getContent()).isEqualTo(content);
    }
}
  • ObjectMapper 클래스 : 직렬화(serialization),역직렬화(deserialization)을 할 때 사용한다.

직렬화, 역직렬화
직렬화 : 자바 시스템 내부에서 사용되는 객체를 외부에서 사용할 수 있도록 데이터 변환
(자바 객체 => JSON)
역직렬화: 직렬호의 반대, 외부에서 사용하는 데이터를 자바 객체 형태로 변환하는 작업
(JSON => 자바 객체)


Article.Java : title = "제목" , content = "내용" (Object)
JSON :

{
	"title": "제목",
    "content" : "내용"
}
  • writeValueAsString() : 객체를 JSON으로 직렬화.
  • MockMvc : HTTP 메서드, URL, 요청 본문, 요청타입 등을 설정한 후 설정한 내용을 바탕으로 테스트 요청을 보낸다.
  • contentType : 요청을 보낼 때 JSON, XML 등 다양한 타입 중 하나를 골라 요청을 보낸다.
    (여기에서는 JSON 타입을 보낸다고 명시.)

해당 글은 다음 도서의 내용을 정리하고 참고한 글임을 밝힙니다.
신선영, ⌜스프링 부트 3 벡엔드 개발자 되기 - 자바 편⌟, 골든래빗(주), 2023, 384쪽

profile
정도를 걷는 엔지니어

0개의 댓글