롬복과 테스트코드

hyyyynjn·2021년 2월 21일
2
post-thumbnail

롬복

  • 롬복은 Getter, Setter, 기본 생성자, toString함수를 어노테이션만으로 자동생성해주는 라이브러리이다.
  • build.gradle에 코드를 추가하여 롬복을 프로젝트에 추가한다.
    // lombok
    annotationProcessor("org.projectlombok:lombok")
    compile('org.projectlombok:lombok')

annotationProcessor : gradle 버전이 올라감에 따라 롬복설정이 변하였기에 설정해준다.

  • HelloResponseDto 클래스를 만든다

@Getter
@RequiredArgsConstructor
public class HelloResponseDto {

    private final String name;
    private final int amount;
}

@Getter
- 선언된 모든 필드의 get 메소드를 생성해준다 (getter 메소드를 내가 생성할 필요 없다)
@RequiredArgsConstructor
- 선언된 모든 final 필드가 포함된 생성자를 생성해준다.(final이 없는 필드는 생성하지 않는다.)

  • HelloResponseDto 클래스에 대한 테스트 코드를 작성한다. (HelloResponseDtoTest)
import org.junit.Test;
import static org.assertj.core.api.Assertions.assertThat;

public class HelloResponseDtoTest {

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

        HelloResponseDto dto = new HelloResponseDto(name,amount);

        // assertThat
        //      assertj라는 테스트 검증 라이브러리의 검증 메소드이다.
        //      검증하고자 하는 대상을 인자로 받고, 메소드 체이닝을 활용하여 isEqualTo 메소드를 이어서 사용할 수 있다.
        //          isEqualTo : a
        assertThat(dto.getName()).isEqualTo(name);
        assertThat(dto.getAmount()).isEqualTo(amount);
    }
}
  • 테스트 코드가 pass하면 HelloResponseDto를 사용하기위해 HelloController에 코드를 추가한다.
  • JUnit의 assertThat이 아니라 assertj의 assertThat을 사용한다.
  • assertj의 장점(JUnit과 비교하였을 때)
    • CoreMatchers와 다르게 추가적 라이브러리가 필요하지 않다.
    • 자동완성이 좀더 확실하게 지원된다.
  • assertThat
    • assertj라는 테스트 검증 라이브러리의 검증 메소드이다.
    • 검증하고자 하는 대상을 인자로 받고, 메소드 체이닝을 활용하여 isEqualTo 메소드를 이어서 사용할 수 있다.
  • isEqualTo
    • ssertj의 동등 비교 메소드이다. assertThat의 인자값과 동일할 경우만 성공한다.
  • HelloController
    @GetMapping("/hello/dto")
    public HelloResponseDto helloDto(@RequestParam("name") String name,
                                     @RequestParam("amount") int amount) {
        return new HelloResponseDto(name, amount);
    }
  • @RequestParam
    • 외부에서 API로 넘긴 파라미터를 가져오는 어노테이션이다.
  • HelloController에 대한 테스트 코드도 작성한다. (HelloControllerTest)
//jsonPath, is관련 라이브러리를 직접 import해줘야 한다 (intellij에서 제대로 import안해줌)
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.jsonPath;
import static org.hamcrest.Matchers.is;

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

        // param
        //      API 테스트에 사용될 요청 파리미터를 설정한다. String값만 허용된다.
        // jsonPath
        //      JSON 응답값을 필드별로 검증할 수 있는 메소드이다.
        //      $를 기준으로 필드명을 명시한다. ($.name, $.amount와 같이)
        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 응답값을 필드별로 검증할 수 있는 메소드이다.
    • '$'를 기준으로 필드명을 명시한다. ($.name, $.amount와 같이)

1개의 댓글

comment-user-thumbnail
2021년 2월 22일

열심히하세요~

답글 달기