본문으로 바로가기
더보기

<스프링 부트와 AWS로 혼자 구현하는 웹 서비스 - 이동욱> 책을 활용해

공부한 내용을 정리할 예정입니다.


1. 응답 Dto 생성 및 롬복 기능 테스트

먼저 web 패키지에 dto 패키지를 추가합니다.

앞으로 모든 응답 Dto는 이 Dto 패키지에 추가됩니다.

 

HelloResponseDto를 생성합니다.

package com.hyemcomi.springboot.web.dto;

import lombok.Getter;
import lombok.RequiredArgsConstructor;

@Getter
@RequiredArgsConstructor
public class HelloResponseDto {
    private final String name;
    private final int amount;
}
  • @Getter : 선언된 모든 필드의 get 메소드를 생성해 주는 어노테이션
  • @RequiredArgsConstructor : 선언된 모든 final필드가 포함된 생성자를 생성해 준다.
                                          final이 없는 필드는 생성자에 포함되지 않는다.

생성한 Dto에 적용된 롬복이 잘 작동하는지 테스트 코드를 작성해 확인합니다.

 

HelloResponseDtoTest 클래스를 생성합니다.

package com.hyemcomi.springboot.web.dto;

import static org.assertj.core.api.Assertions.assertThat;
import org.junit.Test;

public class HelloResponseDtoTest {
    @Test
    public void 롬복_기능_테스트(){
        //given
        String name = "test";
        int amount = 1000;

        //when
        HelloResponseDto dto = new HelloResponseDto(name,amount);

        //then
        assertThat(dto.getName()).isEqualTo(name);
        assertThat(dto.getAmount()).isEqualTo(amount);
    }
}
  • assertThat : assertj라는 테스트 검증 라이브러리의 검증 메소드, 검증하고 싶은 대상을 메소드 인자로 받음
  • isEqualTo : assertj의 동등 비교 메소드, assetThat에 있는 값과 isEqualTo의 값을 비교해서 같을 때만 성공

테스트에 실패한다면 그레이들 버전문제일 수 있습니다. (인텔리제이 기본 버전이 5로 설정되어 있는듯?)

터미널 창을 열어서 아래 명령을 입력해 그레이들 버전을 책 기준 4.8에 맞춰주고 다시 실행하면 테스트에 성공합니다.

gradlew wrapper --gradle-version 4.10.2

테스트를 실행시켜주면 아래와 같이 성공한 것을 볼 수 있습니다.

롬복 기능 테스트 성공

2. HelloController에 ResponseDto를 활용하도록 수정

위의 롬복 기능 테스트에서 get메소드와 @RequiredArgsConstructor로 생성자가 자동으로 생성되는 것을 확인했습니다.

 

HelloController에 새로 만든 ResponseDto를 사용하도록 코드를 추가해줍니다.

    @GetMapping("/hello/dto")
    public HelloResponseDto helloDto(@RequestParam("name") String name,
                                     @RequestParam("amount") int amount){
        return new HelloResponseDto(name, amount);
    }
  • RequestParam : 외부에서 API로 넘긴 파라미터를 가져오는 어노테이션

HelloControllerTest에 추가된 API를 테스트하는 코드를 추가합니다.

hello가_리턴된다 아래에 테스트 코드를 추가해주면 됩니다.

    @Test
    public void helloDto가_리턴된다() throws Exception {
        String name = "hello";
        int amount = 1000;

        mvc.perform(
                get("/hello/dto")
                        .param("name", name)
                        .param("amount", String.valueOf(amount)))
                .andExpect(status().isOk())
                .andExpect(jsonPath("$.name", is(name)))
                .andExpect(jsonPath("$.amount", is(amount)));
    }
  • param : API 테스트할 때 사용될 요청 파라미터를 설정, 값은 String만 허용된다.
  • jsonPath : JSON 응답값을 필드별로 검증할 수 있는 메소드이다.
                  $를 기준으로 필드명을 명시한다.

추가된 테스트를 실행시키면 정상적으로 테스트가 통과되는 것을 확인할 수 있다.

dto API 테스트 결과